Nieporozumienie dotyczące eksportu pliku Excel

Witam

Stworzyłem program w vba, który eksportuje dane z tabeli (Userform) do pliku Excel.

Problem polega na tym, że program będzie działał normalnie za pierwszym razem. W 2. (bez modyfikacji) pojawi się błąd 1004.

 

KOD:

Sub Export_excel()

Sun i, j        As liczba całkowita

Sun i0, j0      jako liczba całkowita

Oceńmy liczbę punktów

j0 = 0

i0 = 3

k = 0

Podczas gdy j0 < 1

    Jeśli Array.Workbook1.Cells(i0, 1) <> wartość "Brak", to

        k = k + 1

        i0 = i0 + 1

    Inaczej

        d0 = 1

    Zakończ jeżeli:

Wend

Jeśli k = 0, to

    MsgBox "Tabela jest pusta"

    Wyjdź z subwoofera

Zakończ jeżeli:

Punkty = k + 1

Wywołaj polecenie AddNewWorkbook

"Tworzymy obiekt Excel

'Ustaw xlApp = CreateObject("Excel.Application")

'Ustaw xlBook = xlApp.Skoroszyty

Otwórz plik

'Workbooks.Open fileName:=lien_fichierxlsx

Skoroszyty (Nom_Fichier i ".xlsx"). Aktywuj błąd "1004"

"Arkusze robocze". Wybrać

Dla i = 1 TB Nbpoints + 1

    Zakres("A" & i) = Tablica.Skoroszyt1.Komórki(i, 1)

    Zakres("B" & i) = Tablica.Skoroszyt1.Komórki(i, 2)

    Zakres("C" & i) = Tablica.Skoroszyt1.Komórki(i, 3)

    Zakres("D" & i) = Tablica.Skoroszyt1.Komórki(i, 4)

    Zakres("E" & i) = Tablica.Skoroszyt1.Komórki(i, 5)

    Zakres("F" & i) = Tablica.Skoroszyt1.Komórki(i, 6)

Następny

ActiveWorkbook.Zapisz

Aktywny skoroszyt.Zamknij

MsgBox "Eksport powiódł się!", vbMsgBoxSetForeground + vbExclamation, "PROJEKT TRAPRO"

Koniec subwoofera

 

Załączam makro do Ciebie, jeśli chcesz zobaczyć, jak to zrobiłem.

Musisz utworzyć folder: D:\Import-Export\ (lub zmienić łącze w Userform_Initialize)

 

Bardzo dziękuję za odpowiedzi,

JB


copie_de_prog.swp

Oto przykład, który działa za pierwszym razem, a nie za drugim...


capture2.png

Witam

 

W którym wierszu występuje błąd? Podczas debugowania zwykle wiersz jest wyróżniony.

To jest na szali:

Skoroszyty (Nom_Fichier i ".xlsx"). Aktywować

 

Jeśli umieszczę to w komentarzu, to jest to linijka:

Zakres("A" & i) = Tablica.Skoroszyt1.Komórki(i, 1)

 

W rzeczywistości mam wrażenie, że prb jest dostarczany z językiem excel

 

W rzeczywistości twoja linia:

 

'Workbooks.Open fileName:=lien_fichierxlsx

 

 

Jest w komentarzach, a na końcu kodu zamykasz swój segregator!

 

Aktywny skoroszyt.Zamknij

 

Tak więc na początku makra musisz sprawdzić, czy jest już otwarte i otworzyć je ponownie, jeśli to konieczne!

Fragment kodu, który umożliwia sprawdzenie, czy skoroszyt jest otwarty, i otwarcie go w razie potrzeby:

 

Dim wbName As String = "Test.xlsx"

Dim PathName As String = "c:\Test\" & wbName

Dim wbBook jako Excel.Workbook

 

 

Dla każdego wbBook w xlApp.Workbooks

 

Jeśli wbBook.Name = wbName to

wbBook.Activate()

Wyjdź z subwoofera

Zakończ jeżeli :

Następny

 Przyciemnij xl_wbBook jako Excel.Workbook = xlApp.Workbooks.Open(PathName) 

W rzeczywistości tworzyłem plik Excela w AddNewWorkbook.

Zrobiłem kilka testów, otwierając go w drugim makrze.

 

Sub excel_ouvert()

Dim wbName As String

Dim PathName As Ciąg

Dim wbBook Jak Excel. Skoroszyt

 

'wbName = "Test.xlsx"

'PathName = "D:\Import-Export\" & wbName

 

Dla każdego wbBook w xlApp.Workbooks

    Jeśli wbBook.Name = Nom_Fichier & ".xlsx", to

        wbBook.Activate (wbBook.Aktywuj)

        Wyjdź z subwoofera

    Zakończ jeżeli:

Następny

Słońce xl_wbBook Jak przewyższać. Skoroszyt

 

xl_wbBook = xlApp.Workbooks.Open(lien_fichierxlsx)

 

Koniec subwoofera

 

Mam błąd podczas tworzenia pliku:

xl_wbBook = xlApp.Workbooks.Open(lien_fichierxlsx)

 

Aby to zrozumieć, umieściłem makro w pierwszym komentarzu.


capture4.png

Jest taka opcja 

 

UserForm1.Workbook1.Export

 

Czy można go zapisać w folderze?

W tym czasie dla mnie fragment kodu nie działa!

 

Zamiast tego należy go utworzyć:

Przyciemnij nowySkoroszyt jako Excel.Skoroszyt = Me.Application.Workbooks.Add()

 

Następnie zapisz go pod wybraną nazwą:

 

Podanie.DisplayAlerts = Fałszywy aktywny skoroszyt.Zapisz jako nazwę pliku:=lien_fichierxlsx, FileFormat:=xlNormal, _ Hasło:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=Fałszywa aplikacja.DisplayAlerts = Prawda

 

Nie zrozumiałem twojej ostatniej wiadomości.

Umieściłem

 

Przyciemnij nowySkoroszyt Jako Excel. Skoroszyt

newWorkbook = Me.Application.Workbooks.Add()

 

a on mówi mi: "Znęcanie się nade mną"

Program jest w module.

 

Czy powinienem go włożyć?

UserForm1.Workbook1.Application.Workbooks.Add()

 

 

Funkcja Eksportuj w skoroszycie 1 eksportuje wszystkie dane ze skoroszytu do pliku programu Excel.

Jest jednak tylko do odczytu i w specjalnym formacie: .XML

 

Nazwa utworzonego pliku:

OWCSheet91101.XML

 

Chcę wiedzieć, czy za pomocą makra można zapisać go w .xlsx pod żądaną nazwą.

To by naprawiło mój PRB

Przepraszam

Skoroszyty.Dodaj

powinno wystarczyć przed zapisem jako zamiast 

Przyciemnij nowySkoroszyt Jako Excel. Skoroszyt

newWorkbook = Me.Application.Workbooks.Add()

Oto mój ostateczny kod:

Wywołaj polecenie AddNewWorkbook

'Sprawdź, czy skoroszyt jest otwarty

Dla każdego xlBook w xlApp.Workbooks

    Jeśli xlBook.Name = Nom_Fichier & ".xlsx", to

        xlBook.Activate (Aktywuj)

        Wyjdź z subwoofera

    Zakończ jeżeli:

Następny

– Dodajemy segregator

Ustaw xlBook = xlApp.Workbooks.Add

– Nadajemy segregatorowi nazwę

xlBook.SaveAs (lien_fichierxlsx)

 

'zmienia nazwę pliku

Arkusze("Arkusz1"). Nazwa = "Stół na butelki"

Arkusze("Arkusz2"). Nazwa = "Dane"

 

"Eksportuj plik

Dla i = 1 TB Nbpoints + 1

    Zakres("A" & i) = Tablica.Skoroszyt1.Komórki(i, 1)

    Zakres("B" & i) = Tablica.Skoroszyt1.Komórki(i, 2)

    Zakres("C" & i) = Tablica.Skoroszyt1.Komórki(i, 3)

    Zakres("D" & i) = Tablica.Skoroszyt1.Komórki(i, 4)

    Zakres("E" & i) = Tablica.Skoroszyt1.Komórki(i, 5)

    'Zakres("F" & i) = Tablica.Skoroszyt1.Komórki(i, 6)

Następny

 

ActiveWorkbook.Zapisz

Aktywny skoroszyt.Zamknij

 

Dziękuję Lucas za poświęcony czas!!

 

JB

1 polubienie