Microsoft Excel

Herbers Excel/VBA-Archiv

Open File VBA

Betrifft: Open File VBA von: Riman
Geschrieben am: 16.10.2014 10:27:57

Servus,

Der code wurde mit Makro aufgenommen, und vergleicht zwei Tabellen.
Ich möchte nicht immer mit der selbe Tabelle vergleichen, sondern, dass ein Open File Dialog öffnet und ich die Datei selber aussuchen kann.
Also ich habe verschiedene "Erfassungsliste_Solidcore.xlsx" Tabelle.

Wass ich will, dass ein OpenDialog Fenster aufgeht und ich die Datei selber aussuchen kann. Der Code soll so bleiben, nur dass "Erfassungsliste_Solidcore.xlsx" soll in ein Opendialog ausgewählt werden und in die Code integriert werden.

"C:\Users\Dokumente\WöchentlicheReport\Erfassungslieste\[GEWÄHLTE DATEI].xlsx" _

Sub Vergleichen()
'
' Vergleichen Makro
'

'
    Range("K1").Select
    ActiveCell.FormulaR1C1 = "Erfasst"
    Range("K2").Select
    Columns("K:K").EntireColumn.AutoFit
    Range("K2").Select
    ActiveCell.FormulaR1C1 = ""
    ChDir "C:\Users\Dokumente\Wöchentliche Report\Erfassungslieste"
    Workbooks.Open Filename:= _
        "C:\Users\Dokumente\Wöchentliche Report\Erfassungslieste\Erfassungsliste_Solidcore.xlsx" _
 _
        , Origin:=xlWindows
    ActiveWindow.ActivateNext
    Range("K2").Select
    ActiveCell.FormulaR1C1 = _
        "=COUNTIF([Erfassungsliste_Solidcore.xlsx]Tabelle1!C1,C[-10])"
    Columns("K:K").Select
    Selection.FormatConditions.AddIconSetCondition
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1)
        .ReverseOrder = False
        .ShowIconOnly = True
        .IconSet = ActiveWorkbook.IconSets(xl3Symbols)
    End With
    Selection.FormatConditions(1).IconCriteria(1).Icon = xlIconNoCellIcon
    With Selection.FormatConditions(1).IconCriteria(2)
        .Type = xlConditionValueNumber
        .Value = 0
        .Operator = 7
        .Icon = xlIconRedCrossSymbol
    End With
    With Selection.FormatConditions(1).IconCriteria(3)
        .Type = xlConditionValueNumber
        .Value = 1
        .Operator = 7
        .Icon = xlIconGreenCheckSymbol
    End With
    With Selection
        .HorizontalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("L3").Select
End Sub

  

Betrifft: AW: Open File VBA von: yummi
Geschrieben am: 16.10.2014 12:57:37

Hallo Riman,

Anstelle

    Workbooks.Open Filename:= _
        "C:\Users\Dokumente\Wöchentliche Report\Erfassungslieste\Erfassungsliste_Solidcore.xlsx" _
 _

dieses:
Dim var As Variant
    ChDrive "C:"
    ChDir "C:\Users\Dokumente\Wöchentliche Report\Erfassungslieste"
    var = Application.GetOpenFilename( _
         FileFilter:="Excel-Dateien (*.xls; *.xlsx; *.xlsm),*.xls;*.xlsx;*.xlsm", _
         MultiSelect:=False)

    Workbooks.Open(var, UpdateLinks:=False)   'wenn die geöffnete Datei verändert werden soll,  _
lss den UdateLinks weg)

Gruß
yummi


  

Betrifft: AW: Open File VBA von: Riman
Geschrieben am: 16.10.2014 13:05:42

Danke yummi,

eine Frage noch, was ist mit der Zeile "Erfassungsliste_Solidcore.xlsx"
Da ist die Name der Datei drin, muss das nicht geändert werden, oder eine Parameter übergeben.

=COUNTIF([Erfassungsliste_Solidcore.xlsx]Tabelle1!C1,C[-10])


  

Betrifft: AW: Open File VBA von: yummi
Geschrieben am: 16.10.2014 13:18:24

Hallo Riman,

ja habe ich nicht gesehen, überall, wo du direkt auf deine Datei referenzierst, kommt stattdessen var hin (ohne Anführungsstriche)

Gruß
yummi


  

Betrifft: AW: Open File VBA von: Riman
Geschrieben am: 16.10.2014 14:03:17

Danke dir sehr Yummi :) jetzt kommt das Opendialog, alles funktioniert wunderbar, aber nur ich bekomme Fehler beim ( UpdateLinks:=False)

Fehler beim Kompilieren
Erwartet:=

Workbooks.Open(var, UpdateLinks:=False) 'wenn die geöffnete Datei verändert werden soll, _
lss den UdateLinks weg)


  

Betrifft: AW: Open File VBA von: yummi
Geschrieben am: 16.10.2014 14:29:53

Hallo Riman,

sry mein Fehler:

Du brauchst noch eine Variable wkbQuelle as workbook und wks as worksheet

Set wkbQuelle = Workbooks.Open(var(iCounter), UpdateLinks:=False)

wkbQuelle ist dann dein Workbook auf das du zugreifst.

Direkt danach kannst Du

Set wks = wkbQuelle.Sheets("Tabelle1")

deine countif zeile musst du auch anpassen. lad am besten mal die Datei hoch, das ist einfacher.


Gruß
yummi


  

Betrifft: AW: Open File VBA von: Riman
Geschrieben am: 16.10.2014 14:45:59

Hast du eine Email Adresse Yummi, dann kann ich es dir Schicken.


  

Betrifft: AW: Open File VBA von: yummi
Geschrieben am: 16.10.2014 14:49:37

Hallo Riman,

lad es hier über fil upload hoch

Gruß
yummi


  

Betrifft: AW: Open File VBA von: Riman
Geschrieben am: 16.10.2014 15:01:40

https://www.herber.de/bbs/user/93198.zip

Also die MakroDatei importiert die CSV Datei und bearbeitet es anschlißend!
Dann vergleicht der MakroDatei mit der normale Datei, ob die PC vorhanden sind oder nicht.
Es klappt nach deine Code, aber in dem Feld wo sie verglichen werden, ist kein Wert drin, also #wert


  

Betrifft: AW: Open File VBA von: yummi
Geschrieben am: 16.10.2014 15:03:06

ok ich schau mal, muss aber jetzt erstmal wweg. kann also evtl bis morgen früh dauern.


  

Betrifft: AW: Open File VBA von: yummi
Geschrieben am: 16.10.2014 18:55:51

Hallo Riman,

da sind überhaupt keine Referenzierungen drin, dass es soweit läuft ist Glücksache.
Die Variablen sind nicht deklaroert. Schreib mal Option explicit in die erste Zeile jedes Moduls, dann siehst du was ich meine.

Was willst du hier denn erreichen:

    ActiveCell.FormulaR1C1 = _
        "=INT([@[CPU-Geschwindigkeit (in MHz)]]*0.01+0.5)/0.01"
Gruß
yummi


  

Betrifft: AW: Open File VBA von: Riman
Geschrieben am: 16.10.2014 19:20:27

Was soll ich jetzt nach deiner Meinung machen`? Wie kann ich es verbessern? Eigentlich fehlt mir nur die Funktion mit Vergleichen, dann bin ich fertig mit der Aufgabe.
Ich wäre dir sehr Dankbar, wenn du es mir verbessern würdest.

Danke
Gruß
Riman


  

Betrifft: AW: Open File VBA von: yummi
Geschrieben am: 17.10.2014 09:35:03

Hallo Riman,

das beantwortet aber meien Frage nicht ;-)

Was willst du hier denn erreichen:

    ActiveCell.FormulaR1C1 = _
        "=INT([@[CPU-Geschwindigkeit (in MHz)]]*0.01+0.5)/0.01"
Soll damit die komplette Spalte mit der formel gefüllt werden oder wirklich nur die eine Zelle?
mit [@[CPU-Geschwindigkeit (in MHz)]] willst du die Spalte mit diesem Namen ansprechen?


Ich habe leider nicht die Zweit das komplett umzubauen, aber evtl kann ich es die an einer Fromel zeigen.


Gruß
yummi


  

Betrifft: AW: Open File VBA von: Riman
Geschrieben am: 17.10.2014 09:41:05

Ja für die komplette Spalte.
Danke dir sehr, ja es reicht schon wenn du es einmal machst, dann kann ich die anderen anhand deine Lösung verbessern. Und das mit dem Opendialog wäre auch super.

Danke Yummi :)


  

Betrifft: AW: Open File VBA von: yummi
Geschrieben am: 17.10.2014 12:54:05

Hallo Riman,

ich hab dir mal ein paar kommentare reingeschrieben.
nimm erstmal nur die Berechnungsfunktion und pack sie in deine bestehende und schau mal. Dann kannst Du dir nach und nach den Rest umbauen. Ich hab nicht immer ganz durchblcikt, wann du was auf welcher Sheet machen willst, kann sein dass bei den sachen die ich dir zur Ansicht eingebaut habe schon verwechslungen drin sind. Das ganze läuft bei mir nicht rund, aber die Funktion zum Berechnen deiner fehlenden Werte tuts meiner Ansicht nach jetzt.

https://www.herber.de/bbs/user/93212.xlsm

Gruß
yummi


  

Betrifft: AW: Open File VBA von: Riman
Geschrieben am: 17.10.2014 14:45:30

Yummi ich habe alles umgeändert, aber leider tauchen einige Fehler auf, und da komme ich wirklich nicht weiter, ich arbeite die ganze Zeit dran. Und mit dem Openfile also am Ende wo die Dateien vergleichen werden, da habe ich keine ändernung gesehen.

Kannst du bitte Gucken obsoweit alles in Ordnung ist?

Danke dir für deine Unterstützung.



https://www.herber.de/bbs/user/93215.zip


  

Betrifft: AW: Open File VBA von: yummi
Geschrieben am: 17.10.2014 15:07:50

Hallo Riman,

also Du hast zwar teile von dem von mir geschickten übernommen, aber die du referenzierst überall immer noch auf das Global Objekt. (z.B. Range ohne zuweisung welche Tabelle gemeint ist.

Wenn ich es so laufen lasse, dann sollen CPU Geschwindigkeiten aufgerundet werden, es sind aber gar keine da.


Mach erstmal folgenden Schritt:
1. Nehm dein alten original Code
2. ersetze folgende Funktion

Function CPU_Geschwindigkeit_Aufrunden()
'
' CPU_Geschwindigkeit_Aufrunden Makro
' CPU-Geschwindigkeit (in MHz) in volle Zahlen Runden in eine neue Spalte
'

'
Dim llast As Long
dim wks as Worksheet       'damit du Init nicht brauchst

    'mal ohne select

    Set  wks = ActiveSheet     'wenn die Daten hier im falschen Tabellenblatt landen dann  _
anpassen

    wks.Columns("G:G").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    wks.Cells(1, 7).Value = "CPU-Geschwindigkeit (in MHz)2"                          'ü _
berschrift in G1 setzen
    llast = wks.Cells(Rows.Count, 6).End(xlUp).Row                                   'letzte  _
Zeile in Spalte F
    If llastG >= 2 Then
        wks.Range("G2:G" & llast).FormulaLocal = "=($F2*0,01+0,5)/0,01"
    End If
    
End Function
3. lass laufen

Da der Code bei mir gar nicht läuft, kann ich das ganze leider nicht testen. Bei mir werden keien Daten kopiert, vlt wende ich es ja auch in der falschen Reihenfolge an, hab die xlsx Datei überhaupt nicht benutzt.

Gruß
yummi

PS: Falls es eine Fehlermeldung gibt in der Zeile mit der Berechnung, nimm mal . anstatt ,
Ich hab gerade gelesen, dass es unterschiede geben kann in der Formeleingabe, je nachdem ob deutsche Excel Version oder englische.