String aus Excelzelle für Datei aus Netzwerk verwenden
Hallo ins Forum,
die Spezialisten sind gefragt.
Ich suche Hilfe zu dieser Problemstellung:
Ich habe eine Excel Datei mit 8 Spalten und beliebig vielen Zeilen.
Die erste Zeile ist die Deklaration der Spalten wobei die erste Spalte also A1 der Artikel ist nach dem gesucht wird. Gesucht wird der Artikel durch ab scannen eines Barcodes (Inputbox). Die nachfolgenden Spalten also B1 bis H1 (in Excel Datei 1 bis Datei 7 benannt sind Dateinamen) können in der jeweiligen Zeile einen Wert haben oder auch leer sein. Der String in der jeweiligen Zelle ist der Name einer Pdf- oder Worddatei die später über Netzwerk geöffnet werden soll.
Ich brauche nun also wenn der Artikel in der Liste gefunden wurde, die einzelnen Zellen aus der Zeile als Variable um diese dann in den Netzwerkaufruf zur Datei einbinden zu können.
Als csv Datei ist das wohl auch realisierbar, ich möchte aber direkt mit der Exceldatei arbeiten.
Hab vorher noch nichts mit VBS gemacht und gerade angefangen mich ins Thema einzulesen. Was ich bisher habe funktioniert mal soweit das der eingescannte Artikel gefunden wird. Wie ich jetzt aber den Bezug zu den weiteren Zellen/Spalten herstellen soll daran scheitere ich. (doch eher ein Readline?)
Ich will vor allem auch verstehen was wann im Script passiert deswegen ist entsprechend einiges aus kommentiert. Ich hoffe es gibt hier die Profis die es mir nahe bringen und weiterhelfen können.
Hoffe mal es ist einigermaßen Verständlich formuliert.
Hier mal mein bisheriger Ansatz:
die Spezialisten sind gefragt.
Ich suche Hilfe zu dieser Problemstellung:
Ich habe eine Excel Datei mit 8 Spalten und beliebig vielen Zeilen.
Die erste Zeile ist die Deklaration der Spalten wobei die erste Spalte also A1 der Artikel ist nach dem gesucht wird. Gesucht wird der Artikel durch ab scannen eines Barcodes (Inputbox). Die nachfolgenden Spalten also B1 bis H1 (in Excel Datei 1 bis Datei 7 benannt sind Dateinamen) können in der jeweiligen Zeile einen Wert haben oder auch leer sein. Der String in der jeweiligen Zelle ist der Name einer Pdf- oder Worddatei die später über Netzwerk geöffnet werden soll.
Ich brauche nun also wenn der Artikel in der Liste gefunden wurde, die einzelnen Zellen aus der Zeile als Variable um diese dann in den Netzwerkaufruf zur Datei einbinden zu können.
Als csv Datei ist das wohl auch realisierbar, ich möchte aber direkt mit der Exceldatei arbeiten.
Hab vorher noch nichts mit VBS gemacht und gerade angefangen mich ins Thema einzulesen. Was ich bisher habe funktioniert mal soweit das der eingescannte Artikel gefunden wird. Wie ich jetzt aber den Bezug zu den weiteren Zellen/Spalten herstellen soll daran scheitere ich. (doch eher ein Readline?)
Ich will vor allem auch verstehen was wann im Script passiert deswegen ist entsprechend einiges aus kommentiert. Ich hoffe es gibt hier die Profis die es mir nahe bringen und weiterhelfen können.
Hoffe mal es ist einigermaßen Verständlich formuliert.
Hier mal mein bisheriger Ansatz:
Option Explicit
Rem == Deklaration der Variablen
Dim barcode, oWorkbook, oExcel, oSheet, arWerte, oWertGefunden, Dokument(8)
Dokument(0) = "Artikel"
Dokument(1) = "Datei1"
Dokument(2) = "Datei2"
Dokument(3) = "Datei3"
Dokument(4) = "Datei4"
Dokument(5) = "Datei5"
Dokument(6) = "Datei6"
Dokument(7) = "Datei7"
Const ForReading = 1
Rem == Initialisiere Excel Datei Tabellenblatt ==
Set oExcel = CreateObject("Excel.Application")
Set oWorkbook = oExcel.Workbooks.Add("C:\test.xlsx")
Set oSheet = oWorkbook.Sheets(1)
REM Excel Tabelle mit True anzeigen ==
oExcel.Visible = FALSE
Rem == Inputbox zum Barcode scannen aufrufen ==
barcode=InputBox ("Bitte Barcode abscannen:")
rem WScript.Echo ("eingescannter Barcode:") , barcode
'Array mit Suchwert, die in der Tabelle gesucht werden:
arWerte = Array(barcode)
rem wscript.echo
'In der Schleife ein Aufruf der Suchfunktion für jeden Wert im Array
FOR barcode = 0 To UBound(arWerte)
fWertSuchen(arWerte(barcode))
NEXT
Function fWertSuchen(strWert)
'On Error Resume Next
Err.Clear
Set oWertGefunden = oSheet.Columns(1).Find(strWert)
Rem == Ausgabe Artikel gefunden ja/nein ==
IF oWertGefunden Is Nothing Then
fWertSuchen = FALSE
wscript.echo " nicht gefunden " & strWert
ELSE
fWertSuchen = TRUE
wscript.echo "gefunden " & strWert
END IF
End Function
oExcel.Quit
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator tomolpi am 05.11.2019 um 10:45:44 Uhr
Code-Tags hinzugefügt
Content-ID: 511790
Url: https://administrator.de/contentid/511790
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
19 Kommentare
Neuester Kommentar
Zitat von @SlainteMhath:
Moin,
verwende doch bitte mal code-tags, dann kann ich dir auch sagen, ab welcher Zeile dein VBA wirr wird
lg,
Slainte
Habe ich eben mal korrigiert, siehe Moderationskommentar.Moin,
verwende doch bitte mal code-tags, dann kann ich dir auch sagen, ab welcher Zeile dein VBA wirr wird
lg,
Slainte
LG
tomolpi
Wie ich jetzt aber den Bezug zu den weiteren Zellen/Spalten herstellen soll daran scheitere ich.
strWertSpalteB = oWertGefunden.Offset(0,1).Value
strWertSpalteC = oWertGefunden.Offset(0,2).Value
'usw.
strWertSpalteB = oSheet.Cells(oWertGefunden.Row,"B").Value
strWertSpalteC = oSheet.Cells(oWertGefunden.Row,"C").Value
Ja. Steht in der Hilfe!
Aber bitte lies doch mal meinen Kommentar!! Da steht die Lösung zu deiner Frage, sogar zwei mögliche.
Aber bitte lies doch mal meinen Kommentar!! Da steht die Lösung zu deiner Frage, sogar zwei mögliche.
Verknüpfen von Variablen und Konstanten geht einfach mit dem & (und-Zeichen).
strDateipfad = "\\" & strServername & "\" & strOrdnername & "\" & strWertVariable
Statt Acrobat-Reader zu starten kannst du auch direkt die verknüpfe Anwendung starten, dafür brauchst Du nur den Dateipfad anzugeben:
Falls Du einen Ordner öffnen willst, dann geht's über den Explorer:
strDateipfad = "\\" & strServername & "\" & strOrdnername & "\" & strWertVariable
Statt Acrobat-Reader zu starten kannst du auch direkt die verknüpfe Anwendung starten, dafür brauchst Du nur den Dateipfad anzugeben:
Call ShellExecute(0, "open", strDatei, "", "", SW_SHOWNORMAL)
Falls Du einen Ordner öffnen willst, dann geht's über den Explorer:
Shell "explorer.exe """ & strOrdner & "\" & strDatei & """", vbNormalFocus
Zitat von @Brave71:
Hallo,
mein Servername ist mit Bindestrich also set strServername = xx-x-xx
Die Bindestriche mag er aber wohl nicht, hab es auch mit Delimiter versucht funktioniert aber auch nicht.
Kann wer helfen?
Wie sieht es bei der Verwendung der IP-Adresse des Servers aus?Hallo,
mein Servername ist mit Bindestrich also set strServername = xx-x-xx
Die Bindestriche mag er aber wohl nicht, hab es auch mit Delimiter versucht funktioniert aber auch nicht.
Kann wer helfen?
Wenn du den Servernamen im Pfad drin meinst (also beim Aufruf über Deine Variante mit Acrobat), dann musst du die Anführungszeichen mit in die Zeichenkette einbauen. Meine Variante hat das bereits drin.
Deine Variante würde dann so aussehen:
Wenn ein Anführungszeichen innerhalb eines Strings dargestellt werden soll, dann muss er doppelt angegeben werde.
Deine Variante würde dann so aussehen:
wsShell.run """C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe""" & " """ & strPfad """"
Wenn ein Anführungszeichen innerhalb eines Strings dargestellt werden soll, dann muss er doppelt angegeben werde.
da fehlen aber die Anführungszeichen:
falsch:
richtig:
Ich vermute mal, dass Du den Servernamen fest im Code hinterlegen willst. Wenn nicht muss der Wert ja auch irgendwo herkommen (z.B. aus einer Inputbox).
"Set" verwendet man nur bei Objektvariablen, hier kann es entfallen.
falsch:
set strServername = xx-x-xx
richtig:
strServername = "xx-x-xx"
Ich vermute mal, dass Du den Servernamen fest im Code hinterlegen willst. Wenn nicht muss der Wert ja auch irgendwo herkommen (z.B. aus einer Inputbox).
"Set" verwendet man nur bei Objektvariablen, hier kann es entfallen.
Kann das sein, dass Du von Datentypen und Variablendeklaration ziemlich wenig verstehst? Das meine ich nicht als Vorwurf oder als ernstgemeinte Frage, denn keiner kann alles.
Zuerst einmal solltest Du in Deinem VBA-Modul oben als erste Zeile folgendes hinschreiben:
Ab dann wirst Du gezwungen Variablen zu deklarieren, so dass Du dann auch weißt, dass die Variable entweder im kompletten Modul oder nur in einer Sub / Function gültig ist.
Dann solltest Du in Deiner Sub / Function, das mal ungefähr so machen:
Ich mach gern die ersten drei Buchstaben der Variablen als Datentyp und dahinter etwas, mit dem ich auch in einem Jahr noch was anfangen kann. Texte werden als String, Ja/Nein-Wert als Boolean gespeichert.
Wenn der VBA-Compiler bzw. -Interpreter die Variable strFlag nämlich als String versteht, dann wird bei der Zeile
Der Text "Wahr" in die Variable gespeichert. Mit etwas Glück klappt der Vergleich ...
... trotzdem, aber verlassen würde ich mich darauf nicht zwingend - es ist zumindest unsauber programmiert.
Vorschlag / Tipp:
Was hälst Du davon, wenn Du Dir ein Buch oder eBook zum Thema "Excel VBA" kaufst und liest. Ich glaube, das würde Dir langfristig sehr viel weiterhelfen.
Mit Excel und VBA kann man (mit etwas Übung natürlich) richtig schön "zaubern"! Aber Achtung: Suchtgefahr! Wenn Du wirklich eintauchst und Du zum "Flow" kommst, dann ist die Kategorie "Zeit" vorrübergehend ausser Kraft gesetzt. Aber schön ist es, wenn man anschließend sieht, was man selbst erschaffen kann.
Viel Glück beim Weiterprobieren!
Zuerst einmal solltest Du in Deinem VBA-Modul oben als erste Zeile folgendes hinschreiben:
Option Explicit
Dann solltest Du in Deiner Sub / Function, das mal ungefähr so machen:
Dim strEingabe as String
Dim blnFlag as Boolean
Ich mach gern die ersten drei Buchstaben der Variablen als Datentyp und dahinter etwas, mit dem ich auch in einem Jahr noch was anfangen kann. Texte werden als String, Ja/Nein-Wert als Boolean gespeichert.
Wenn der VBA-Compiler bzw. -Interpreter die Variable strFlag nämlich als String versteht, dann wird bei der Zeile
strFlag = True
If strFlag = true then
Vorschlag / Tipp:
Was hälst Du davon, wenn Du Dir ein Buch oder eBook zum Thema "Excel VBA" kaufst und liest. Ich glaube, das würde Dir langfristig sehr viel weiterhelfen.
Mit Excel und VBA kann man (mit etwas Übung natürlich) richtig schön "zaubern"! Aber Achtung: Suchtgefahr! Wenn Du wirklich eintauchst und Du zum "Flow" kommst, dann ist die Kategorie "Zeit" vorrübergehend ausser Kraft gesetzt. Aber schön ist es, wenn man anschließend sieht, was man selbst erschaffen kann.
Viel Glück beim Weiterprobieren!