Dzięki, Tydzień kombinowałem i w końcu się udało przy pomocy twojego kodu zrobić prosty backup plików przed wykonaniem złożonych obliczeń miedzy plikami.
Świetnie wytłumaczone, czytelnie i przejrzyście. Spodziewałem się jednak że przeniosą się foldery, a przenosiły się zawartości folderów. Oczywiście foldery też można przenosić, czy jednak excel nie zajmuje się nie-danymi?
Właściwie to będzie końcowy etap kodu Outooka, który tylko przeniesie Activate do widoku otwartego już skoroszytu excela. Excel.Application ... Window ... Activate ???
Generalnie poszedł bym w stronę zdefiniowania zmiennej np. Dim ApkaExcel As Excel.Application a następnie ustawił ją na: Set ApkaExcel = GetObject(, "Excel.Application"). Wtedy możemy odwoływać się np. tak: 1 sposób: ApkaExcel.Workbooks(ApkaExcel.ActiveWindow.Caption).Activate 2 sposób: ApkaExcel.ActiveWindow.Activate Co ważne, należy upewnić się, że jest włączona biblioteka "Microsoft Excel 16.0 object library" (Menu Tools -> References... -> odszukać powyższej biblioteki i ją aktywować -> kliknąć OK). Proszę przeanalizować poniższe kody. Powinny wskazać kierunek. 'PIERWSZE MAKRO Sub UruchamianieExcela() Dim PlikXLS As Workbook Dim wb As Workbook Dim ApkaExcel As Excel.Application On Error Resume Next Set ApkaExcel = GetObject(, "Excel.Application") If Err.Number 0 Then Set ApkaExcel = Nothing End If On Error GoTo 0 If ApkaExcel Is Nothing Then ' Excel nie został uruchomiony Set ApkaExcel = New Excel.Application Set PlikXLS = ApkaExcel.Workbooks.Open("C:\Users\sgodz\Desktop\IT STUDIO\WSPÓŁPRACA I OFERTY\AMCOR\POWER BI DESKTOP\PLIKI DLA UCZESTNIKÓW SZKOLENIA\polaczenieZbazaDanych.xlsm") ApkaExcel.ActiveWindow.Activate ApkaExcel.Visible = True ApkaExcel.Sheets(1).Range("A10") = "tekst" Else ' Excel uruchomiony ale wybieramy, który plik For Each wb In ApkaExcel.Workbooks If wb.Name = "Zeszyt1" Then 'tutaj tekst, który będzie wykonywał coś w obrębie skoroszytu wb.Sheets(1).Range("A10") = "tekst" End If Next End If End Sub '2 DRUGIE MAKRO OTWIERA INSTANCJĘ EXCELA ZA POMOCĄ POLECENIA SHELL Sub OtwieramyApkeExcela() Dim Excel As Variant If Excel = 0 Then 'Aplikacja nie jest otwarta OdPoczatku: Excel = Shell("C:\Program Files\Microsoft Office oot\Office16\EXCEL.EXE", vbNormalFocus) Else On Error GoTo OdPoczatku AppActivate (Excel) End If End Sub Powodzenia.
Jak najbardziej tak :) Do zmiennej zrodlo2 przypisujemy wówczas adres komórki z podaniem nazwy arkusza. Np. zrodlo2 = Worksheets("NazwaArkusza").Range("A1") Jeżeli adres w komórce to tylko ścieżka do folderu bez nazwy pliku należy wówczas połączyć ją z "\" i nazwą pliku wraz z rozszerzeniem. Wzór: Worksheets("NazwaArkusza").Range("A1") & "\NazwaPliku.rozszerzenie" Przykład: Worksheets("Arkusz1").Range("A1") & "\Plik1.xlsx" Powodzenia
Dzięki, Tydzień kombinowałem i w końcu się udało przy pomocy twojego kodu zrobić prosty backup plików przed wykonaniem złożonych obliczeń miedzy plikami.
Dziękuję za komentarz i cieszę się, że film był pomocny w rozwiązaniu problemu :) Pozdrawiam
Świetnie wytłumaczone, czytelnie i przejrzyście. Spodziewałem się jednak że przeniosą się foldery, a przenosiły się zawartości folderów.
Oczywiście foldery też można przenosić, czy jednak excel nie zajmuje się nie-danymi?
czy automatycznie robią backupy czy trzeba uruchomić excela?
Super sprawa :)
Da się zrobić tak żeby nie kopiowało folderu jeśli już istnieje w lokalizacji docelowej?
Próbowałem z
If Dir("mojFSO", vbDirectory) = "" Then
MkDir Path:="mojFSO"
End If
ale nie działa. Mimo wszystko kopiuje :/
Dzięki za komentarz.
Poniżej prosty kod sprawdzający czy folder istnieje:
Sub sprawdzamyIstnienieKatalogu()
Dim objFso
Set objFso = CreateObject("Scripting.FileSystemObject")
Dim Katalog As String
Katalog = "C:/Folder123"
If objFso.FolderExists(Katalog) Then
MsgBox "Tak, istnieje"
Else
MsgBox "Brak katalogu"
End If
End Sub
Pozdrawiam
Korzystam z VBA w Outlook i potrzebuję przejść do otwartego okna skoroszytu excel. Jak użyć Application?
Rozumiem, że chodzi Panu o to, aby móc za pomocą Outlook przekazywać (dodawać) informacje do otwartego pliku Excela?
Właściwie to będzie końcowy etap kodu Outooka, który tylko przeniesie Activate do widoku otwartego już skoroszytu excela.
Excel.Application ... Window ... Activate ???
Generalnie poszedł bym w stronę zdefiniowania zmiennej np. Dim ApkaExcel As Excel.Application a następnie ustawił ją na: Set ApkaExcel = GetObject(, "Excel.Application").
Wtedy możemy odwoływać się np. tak:
1 sposób: ApkaExcel.Workbooks(ApkaExcel.ActiveWindow.Caption).Activate
2 sposób: ApkaExcel.ActiveWindow.Activate
Co ważne, należy upewnić się, że jest włączona biblioteka "Microsoft Excel 16.0 object library" (Menu Tools -> References... -> odszukać powyższej biblioteki i ją aktywować -> kliknąć OK).
Proszę przeanalizować poniższe kody. Powinny wskazać kierunek.
'PIERWSZE MAKRO
Sub UruchamianieExcela()
Dim PlikXLS As Workbook
Dim wb As Workbook
Dim ApkaExcel As Excel.Application
On Error Resume Next
Set ApkaExcel = GetObject(, "Excel.Application")
If Err.Number 0 Then
Set ApkaExcel = Nothing
End If
On Error GoTo 0
If ApkaExcel Is Nothing Then
' Excel nie został uruchomiony
Set ApkaExcel = New Excel.Application
Set PlikXLS = ApkaExcel.Workbooks.Open("C:\Users\sgodz\Desktop\IT STUDIO\WSPÓŁPRACA I OFERTY\AMCOR\POWER BI DESKTOP\PLIKI DLA UCZESTNIKÓW SZKOLENIA\polaczenieZbazaDanych.xlsm")
ApkaExcel.ActiveWindow.Activate
ApkaExcel.Visible = True
ApkaExcel.Sheets(1).Range("A10") = "tekst"
Else
' Excel uruchomiony ale wybieramy, który plik
For Each wb In ApkaExcel.Workbooks
If wb.Name = "Zeszyt1" Then
'tutaj tekst, który będzie wykonywał coś w obrębie skoroszytu
wb.Sheets(1).Range("A10") = "tekst"
End If
Next
End If
End Sub
'2 DRUGIE MAKRO OTWIERA INSTANCJĘ EXCELA ZA POMOCĄ POLECENIA SHELL
Sub OtwieramyApkeExcela()
Dim Excel As Variant
If Excel = 0 Then 'Aplikacja nie jest otwarta
OdPoczatku:
Excel = Shell("C:\Program Files\Microsoft Office
oot\Office16\EXCEL.EXE", vbNormalFocus)
Else
On Error GoTo OdPoczatku
AppActivate (Excel)
End If
End Sub
Powodzenia.
Dziękuję za propozycje. Będę rzeźbił w swoim kodzie.
Życie mi ratujesz, a da radę aby żródło2 pobierało z komórki adres docelowy do kopiowania pliku.
Jak najbardziej tak :) Do zmiennej zrodlo2 przypisujemy wówczas adres komórki z podaniem nazwy arkusza. Np. zrodlo2 = Worksheets("NazwaArkusza").Range("A1")
Jeżeli adres w komórce to tylko ścieżka do folderu bez nazwy pliku należy wówczas połączyć ją z "\" i nazwą pliku wraz z rozszerzeniem. Wzór:
Worksheets("NazwaArkusza").Range("A1") & "\NazwaPliku.rozszerzenie"
Przykład:
Worksheets("Arkusz1").Range("A1") & "\Plik1.xlsx"
Powodzenia
@@smartexcel-s.godziszewski dziękuje