Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.04.2024 14:18:05
28.04.2024 13:43:14
Anzeige
Archiv - Navigation
1848to1852
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA Datei 2. Mal geöffnet
29.09.2021 21:22:19
Claudia
Hallo,
mit einem Code in der „Ziel“-Datei, über einen Button, hole ich mir Daten (Spalten) aus der Preisliste. Klappt auch. Nur wenn die Preisliste schon geöffnet ist, erhalte ich eine Fehlermeldung (… kann kein 2. Mal geöffnet werden)
Ich möchte gerne, dass stattdessen eine MSG-Box erscheint: „Bitte schließen Sie die Preisliste und starten das Einlesen erneut“ - o.s.ä. und dann ein Wechsel zur Preisliste, damit der Anwender diese schließen kann.
Da die Preisliste (Dateiname) eine Variable ist, habe ich keine Ahnung, wie ich das Problem lösen kann.
Gleichzeitig möchte ich auch, das beim Einlesen die Artikelnummer als „Standard“ eingelesen wird, da ich diese später über SVERWEIS weiterverarbeiten muss, zurzeit wird der Wert so eingelesen: 001301 und wird dann nicht erkannt.
Freue mich über jede Hilfe. Danke schon einmal im Voraus.
Preisliste: https://www.herber.de/bbs/user/148351.xlsx
Zieldatei: https://www.herber.de/bbs/user/148352.xlsm
Gruß Claudia

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Datei 2. Mal geöffnet
29.09.2021 23:08:52
ralf_b

Dim objWb As Workbook
'    If varFile = False Then Exit Sub
For Each objWb In Application.Workbooks
If objWb.FullName = varFile Then
objWb.Close SaveChanges:=False
Exit For
End If
Next
Set wbQuelle = Workbooks.Open(varFile)

AW: VBA Datei 2. Mal geöffnet
29.09.2021 23:39:21
Claudia
Hallo Ralf,
ja super, funktioniert, zwar ohne MSG-Box, ist aber auch ok. Allerdings habe ich das Speichern auf TRUE gesetzt, falls doch mal in der Preisliste etwas geändert wurde.
Dafür dir vielen Dank.
Nun muss noch geklärt werden, wie ich den als "Text" definiertem Wert umwandel beim Einlesen.
Versuche es hiermit, klappt aber leider nicht :-(
' With Range("A1:A20000")
' .NumberFormat = "General"
' .Value = .Value
' End With
Danke scon mal im Voraus.
Gruß Claudia
Anzeige
AW: VBA Datei 2. Mal geöffnet
30.09.2021 01:02:29
Claudia
Hallo,
jetzt klappt es doch nicht mehr! Es erscheint wieder eine Fehlermeldung, wenn die Preisliste bereits geöffnet ist.
Ich habe die Datei mit dem geänderten Code noch einmal angefügt.
https://www.herber.de/bbs/user/148356.xlsm
Bitte weiterhin um Unterstützung. Vielen Dank und gute Nacht.
Gruß Claudia
AW: VBA Datei 2. Mal geöffnet
30.09.2021 08:06:08
MCO
Moin!
Dein Code ist noch ein bissl fehlerhaft:
Habe gerade herausgefunden, dass usedrange.rows.count nicht die maximale benutzte Zeile wiedergibt sondern wirklich nur die Range der benutzen Zeile, in deinem Fall werden die ersten 2 Zeilen nicht mit dazugezählt da sie frei sind. (Die beiden freien Zeilen über der Datentabelle gehören aber schon dazu...)
Damit kommst du nur auf 51 Zeilen, währen dein Datensatz aber in Zeile 53 ändert, d.h. die letzten beiden werden nie mit importiert.
Besser ist daher

Cells(Rows.Count, "A").End(xlUp).Row
Außdem ist es sauberer, die Programmierung in ein eigenes Modul einzubetten und darauf zu verweisen.
Schau mal, ob das so für dich funktioniert....
https://www.herber.de/bbs/user/148357.xlsm
Gruß, MCO
Anzeige
AW: VBA Datei 2. Mal geöffnet
30.09.2021 09:53:43
Claudia
Moin MCO,
vielen Dank für deine Hilfe.
Die Umwandlung ins Zahlenformat funktioniert einwandfrei.
Ist die Preisliste aber bereits geöffnet und lass das Macro laufen erscheint: LZF 91 Objektvariable/Withblock nicht festgelegt ...
bei SetwbQsh=wbQuelle ...
Würdest du noch einmal bitte drüber schauen? Danke dir.
Gruß Claudia
AW: VBA Datei 2. Mal geöffnet
01.10.2021 06:39:00
MCO
Mmh.
Der Set-Befehl kommt doch erst nach dem schließen und öffnen der Quell-datei, daher muss das eigentlich passen.
Allerdings verweise ich nicht nur auf die Datei, sondern auch auf das erste Sheet, und zwar mit dem Namen "Sheet 1". Hast du den evtl geändert?
Das ist kein Problem, wenn du den Sheet mit dem INDEX ansprichst.

Set wbQsh = wbQuelle.Sheets(1)
Probier das mal.
Gruß, MCO
Anzeige
ist doch Unsinn, ...
30.09.2021 11:40:29
Rudi
...die Datei erst zu schließen und dann wieder zu öffnen.
Schnipsel:

on error resume next
set wbQuelle=workbooks(split(varFile,"\")(ubound(split(varFile,"\"))))
on error goto 0
if wbQuelle is nothing then
set wbQuelle = workbooks.Open(varFile)
end if
Gruß
Rudi
AW: ist doch Unsinn, ...
30.09.2021 12:00:42
Claudia
Hallo Rudi,
ersteinmal Danke für deinen Beitrag. Grundsätzlich hast du Recht, mir geht es darum, dass eben keine Fehlermeldung erscheint, wenn das Makro bzw. der AW diese Datei ein 2. Mal öffnet. So nach dem Motto: "Ist sie geöffnet, hole die Daten, ist sie nicht geöffnet, dann öffne und hole ..."
Sorry aber mit deinem Code kann ich nichts anfangen, denn die anderen Codezeilen müsste ich ja dann auch entsprechend ändern und das kann ich leider nicht. Würdest du es mir einbauen bitte? Dankeschön.
Gruß Claudia
Anzeige
AW: ist doch Unsinn, ...
30.09.2021 12:27:29
Rudi

Private Sub CommandButton1_Click()
Dim varFile As Variant, wbQuelle As Workbook
Dim vntTMP
Dim lastRow As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
varFile = Application.GetOpenFilename()
If varFile  "Falsch" Then
On Error Resume Next
vntTMP = Split(varFile, "\")
Set wbQuelle = Workbooks(vntTMP(UBound(vntTMP)))
On Error GoTo 0
If wbQuelle Is Nothing Then
Set wbQuelle = Workbooks.Open(varFile)
End If
With wbQuelle.Sheets("Sheet1")
lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("B10:C" & lastRow & ", E10:E" & lastRow & ", O10:O" & lastRow).SpecialCells(xlCellTypeVisible).copy
End With
ThisWorkbook.Sheets("preisliste").Range("A1").PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
wbQuelle.Close SaveChanges:=False
End If
'Variablen aufräumen
Set wbQuelle = Nothing
'Kopierspeicher leeren
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Anzeige
Funktioniert nicht
30.09.2021 18:58:26
Claudia
Hallo Rudi,
dank User MCO hatten wir ja mittlerweile das Makro verändert. Jetzt versuche ich seit Stunden, deine Änderungen dort einzubauen, aber ich bekomme es einfach nicht hin.
Würdest du bitte noch mal schauen? Danke dir.
https://www.herber.de/bbs/user/148377.xlsm
Gruß Claudia
AW: Funktioniert nicht
30.09.2021 19:20:23
Rudi
MCOs Code leicht modifiziert:

Sub Datenimport()
Dim varFile As Variant, wbQuelle As Workbook
varFile = Application.GetOpenFilename()
Dim objWb As Workbook
Dim lastRow As Long
Dim wbQsh As Worksheet
Dim copyrange As Range
Dim wbZielSh As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If varFile = False Then MsgBox "Abbruch", vbInformation: Exit Sub
For Each objWb In Application.Workbooks
If objWb.FullName = varFile Then
Set wbQuelle = objWb
Exit For
End If
Next
If wbQuelle Is Nothing Then Set wbQuelle = Workbooks.Open(varFile)
Set wbQsh = wbQuelle.Sheets("Sheet1")
Set wbZielSh = ThisWorkbook.Sheets("preisliste")
lastRow = wbQsh.Cells(Rows.Count, "A").End(xlUp).Row
Set copyrange = wbQsh.Range("B10:C" & lastRow & ", E10:E" & lastRow & ", O10:O" & lastRow)
With wbZielSh
.Columns("A:E").ClearContents
copyrange.SpecialCells(xlCellTypeVisible).Copy
wbZielSh.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'Daten als Wert setzen
.Columns(1).TextToColumns Destination:=wbZielSh.Range("A1"), _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
wbQuelle.Close SaveChanges:=False
.Range("A1").Select
End With
'Application.CutCopyMode = False 'Kopierspeicher leeren, überflüssig da Mappe geschlossen
'Variablen aufräumen
Set wbQuelle = Nothing
Set wbQsh = Nothing
Set wbZielSh = Nothing
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Gruß
Rudi
Anzeige
Funktioniert immer noch nicht
30.09.2021 19:36:51
Claudia
Hallo Rudi,
scheint irgendwie der Wurm drin zu sein :-)
Jetzt erscheint wieder der Debugger bei: Set wbQsh = wbQuelle.Sheets("Sheet1")
Und zwar, wenn die Preisliste bereits geöffnet ist.
Allerdings finde ich deine Änderungen auch nicht in diesem Code.
Schaust du mal bitte? Dankeschön.
Gruß Claudia
Problem gelöst
30.09.2021 23:34:14
Claudia
Hallo,
danke an Ralf, MCO und Rudi. Ihr habt mir sehr geholfen.
Gruß Claudia

41 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige