Keresés

Új hozzászólás Aktív témák

  • Delila_1

    veterán

    válasz Sziszmisz #16556 üzenetére

    Nem biztos, hogy jól értem a feladatot, mert elég rossz példát adtál meg a csatolt képen.
    Jobb lett volna, ha a címsor Alma, Kék, Jobb, Egyéb, ill. Körte, Piros, Bal, Egyéb. A képen az O:R tartomány minden tételnél azonos.
    Gondolom, a sorok O:R tartományában azt kell feltüntetni, hogy az egyes tételek melyik címsor alá tartoznak. A lenti makró ezt oldja meg.

    Sub Katalogus()
    Dim sor As Integer, usor As Integer, sor1 As Integer
    usor = Cells(Rows.Count, "A").End(xlUp).Row

    For sor = usor To 1 Step -1
    If Cells(sor, "A") = "" Then GoTo Tovabb
    If Cells(sor, "A") = "+" Then
    sor1 = sor
    Do While Cells(sor1, "A") = "+"
    sor1 = sor1 - 1
    Loop
    Cells(sor, "O") = Cells(sor1, "A")
    Cells(sor, "P") = Cells(sor1, "B")
    Cells(sor, "Q") = Cells(sor1, "C")
    Cells(sor, "R") = Cells(sor1, "D")
    End If

    Tovabb:
    Next
    End Sub

  • Oly

    őstag

    válasz Delila_1 #16426 üzenetére

    Szia

    A valóságban külön sheeteken vannak a táblák és a problémát az okozza, hogy minden költéshez van egy megjegyzés oszlop is, melyet a pivot nem tud betenni.
    Így a Te makrós megoldásod hegeszthetem, de az összegző táblán elakadtam.

    Úgy akarom megcsinálni, hogy A1 cellába beírom a kívánt dátumot és akkor kilistázza, hogy adott napon kik mennyit költöttek az adott boltban (én mellé kiírja nekem a megjegyzést is, ezért nem jó a pivot)

    Szóval, hogy tudom neki megadni, hogy rakja be új sorba az emberkét, ha nincs a listában?
    Próbálkoztam, hogy beraktam egy ONERROR-t és akkor tegye be a változót egy új sorba, de valamiért folyton hibára fut:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
    Dim sor%, usor%, sorB%, oszlopB%, WF As WorksheetFunction
    Dim nev$, uzlet$
    Set WF = Application.WorksheetFunction
    usor% = Sheets("data").Cells(Rows.Count, "A").End(xlUp).Row
    uszem% = Cells(Rows.Count, "A").End(xlUp).Row
    Range("b2:u60") = ""
    For sor% = 2 To usor%
    If Sheets("data").Cells(sor%, 1) >= Range("a1") Then
    nev$ = Sheets("data").Cells(sor%, 2)
    uzlet$ = Sheets("data").Cells(sor%, 3)
    On Error GoTo makesor
    sorB% = WF.Match(nev$, Columns(1), 0)
    GoTo vansor
    makesor:
    MsgBox "Hozzuk létre? " & nev$
    Cells(uszem% + 1, 1) = nev$
    sorB% = WF.Match(nev$, Columns(1), 0)
    vansor:
    oszlopB% = WF.Match(uzlet$, Rows(1), 0)
    Cells(sorB%, oszlopB%) = Sheets("data").Cells(sor%, 4)
    Cells(sorB%, oszlopB% + 1) = Sheets("data").Cells(sor%, 5)
    End If
    Next
    End If
    End Sub

  • csferke

    senior tag

    válasz Delila_1 #15958 üzenetére

    Delila!
    Köszi a gyors választ/megoldást. :R
    Sub Novel_F_et()
    Dim sor As Integer, CV As Object
    For Each CV In [B27:B38]
    If CV <> "" And IsNumeric(CV) Then
    On Error GoTo Kov
    sor = Application.WorksheetFunction.Match(CV, Sheets(2).Columns(1), 0)
    Sheets(2).Cells(sor, "F") = Sheets(2).Cells(sor, "F") + Cells(CV.Row, "F")
    End If
    Kov:
    Next
    End Sub

    Mivel a B27:B38-ban nem szám van hanem egy-egy termékhez tartozó kód (betűkből és számokból) sz.tem az if ágban nem kell az IsNumeric(CV).??
    Nem értem, hogy mi szükség van az On Error GoTo Kov és a Kov: sorokra

  • Delila_1

    veterán

    válasz csferke #15952 üzenetére

    Sub Datum_L_be()
    Dim sor As Integer
    sor = Application.WorksheetFunction.Match([A1], Sheets(2).Columns(2), 0)
    Sheets(2).Cells(sor, "L") = Date
    End Sub

    Sub Novel_F_et()
    Dim sor As Integer, CV As Object
    For Each CV In [B27:B38]
    If CV <> "" And IsNumeric(CV) Then
    On Error GoTo Kov
    sor = Application.WorksheetFunction.Match(CV, Sheets(2).Columns(1), 0)
    Sheets(2).Cells(sor, "F") = Sheets(2).Cells(sor, "F") + Cells(CV.Row, "F")
    End If
    Kov:
    Next
    End Sub

  • poffsoft

    veterán

    válasz dellfanboy #15844 üzenetére

    És a KM állás sorában nincsen olyan cella, ami azonosítja, hogy ez a km állás sora lesz? mert azt akár fv-nyel is megoldhatnánk...

    makróval simán átmásolható:
    Option Explicit

    Sub CopyRows()

    Dim i As Integer
    Dim r1, c1, r2, c2, r3 As Double
    Dim wsTest As Worksheet
    Dim sname As String
    sname = "Summa"
    Set wsTest = Nothing
    On Error Resume Next
    Set wsTest = Worksheets(sname)
    On Error GoTo 0

    If wsTest Is Nothing Then
    Worksheets.Add(Before:=Sheets(1), Count:=1, Type:=xlWorksheet).Name = sname
    End If

    Worksheets(sname).Cells.Clear

    For i = 1 To Sheets.Count
    If Not Worksheets(i).Name = sname Then
    r1 = Worksheets(i).UsedRange.Row
    c1 = Worksheets(i).UsedRange.Column
    r2 = r1 + Worksheets(i).UsedRange.Rows.Count - 1
    c2 = c1 + Worksheets(i).UsedRange.Columns.Count - 1
    r3 = Worksheets(sname).UsedRange.Row + Worksheets(sname).UsedRange.Rows.Count
    Worksheets(i).Select
    Worksheets(i).Range(Cells(r1, c1), Cells(r2, c2)).Copy _
    Destination:=Worksheets(sname).Cells(r3, c1)
    End If
    Next i
    Worksheets(sname).Select
    [A1].Select
    End Sub

  • Attas

    aktív tag

    válasz sztanozs #15293 üzenetére

    Köszönöm a választ. De ez is jó? Mert időközben ezt ötöltem ki.
    Range("Elvárt").Select
    On Errors GoTo Hiba
    Sheets("Ütemidő műveletenként (2)").Select
    Hiba:
    UserForm1.Show

    Vagy ennek lassabb a futása? Vagy van hátránya?

  • Attas

    aktív tag

    Sziasztok. Az utóbbi napok segítségeit utólag is nagyon köszönöm. Még egy kérdés felmerült bennem. Excel makróban is biztos van goto parancs. Hogy kell ezt alkalmazkodik? Van egy if-else macróm amiben azt szeretném, ha teljesül az if feltétel, akkor ne folytassa az END IFA utánküldés utasítások egy részeg, hanem ugorjon a közepére ahova Én utasítom.Megoldható ez? Köszönöm előre is!

  • lappy

    őstag

    válasz zhari #14692 üzenetére

    Sub CallMailer()

    Dim lngLoop As Long 'Programming ethics 1. Always start your first line after leaving a line space, and 1 indentation level

    With ActiveSheet
    For lngLoop = 2 To .Cells(Rows.Count, 1).End(xlUp).Row ' Programming ethics 3. Always indent your loops, case statements and with constructors
    Call SendMessage(strTo:=.Cells(lngLoop, 1).Value, strCC:=.Cells(lngLoop, 2).Value, strBCC:=.Cells(lngLoop, 7).Value, strMessage:=.Cells(lngLoop, 8).Value, strSubject:=.Cells(lngLoop, 3).Value, strAttachmentPath:=.Cells(lngLoop, 6).Value, rngToCopy:=.Cells(lngLoop, 9))
    Next lngLoop
    End With 'Programming ethics 2. Always end your last line leaving a line space before ending the sub or function, and having indendation level of 1

    End Sub

    Sub SendMessage(strTo As String, Optional strCC As String, Optional strBCC As String, Optional strSubject As String, Optional strMessage As String, Optional strAttachmentPath As String, Optional rngToCopy As Range, Optional blnShowEmailBodyWithoutSending As Boolean = False)

    Dim objOutlook As Outlook.Application
    Dim objOutlookMsg As Outlook.MailItem
    Dim objOutlookRecip As Outlook.Recipient
    Dim objOutlookAttach As Outlook.Attachment

    If Trim(strTo) & Trim(strCC) & Trim(strBCC) = "" Then
    MsgBox "Please provide a mailing address!", vbInformation + vbOKOnly, "Missing mail information"
    Exit Sub
    End If
    ' Create the Outlook session.
    On Error Resume Next
    Set objOutlook = GetObject(, "Outlook.Application")
    Err.Clear: On Error GoTo -1: On Error GoTo 0
    If objOutlook Is Nothing Then
    Set objOutlook = CreateObject("Outlook.Application")
    End If

    ' Create the message.
    Set objOutlookMsg = objOutlook.CreateItem(olMailItem)

    With objOutlookMsg
    ' Add the To recipient(s) to the message.
    If Trim(strTo) <> "" Then
    Set objOutlookRecip = .Recipients.Add(strTo)
    objOutlookRecip.Type = olTo
    End If

    ' Add the CC recipient(s) to the message.
    If Trim(strCC) <> "" Then
    Set objOutlookRecip = .Recipients.Add(strCC)
    objOutlookRecip.Type = olCC
    End If

    ' Add the BCC recipient(s) to the message.
    If Trim(strBCC) <> "" Then
    Set objOutlookRecip = .Recipients.Add(strBCC)
    objOutlookRecip.Type = olBCC
    End If

    ' Set the Subject, Body, and Importance of the message.
    If strSubject = "" Then
    strSubject = "This is an Automation test with Microsoft Outlook"
    End If
    .Subject = strSubject
    If strMessage = "" Then
    strMessage = "This is the body of the message." & vbCrLf & vbCrLf
    End If
    .Importance = olImportanceHigh 'High importance
    If Not strMessage = "" Then
    .Body = strMessage & vbCrLf & vbCrLf
    End If
    If Not rngToCopy Is Nothing Then
    .HTMLBody = .Body & RangetoHTML(rngToCopy)
    End If

    ' Add attachments to the message.
    If Not IsMissing(strAttachmentPath) Then
    If Len(Dir(strAttachmentPath)) <> 0 Then
    Set objOutlookAttach = .Attachments.Add(strAttachmentPath)
    Else
    MsgBox "Unable to find the specified attachment. Sending mail anyway."
    End If
    End If

    ' Resolve each Recipient's name.
    For Each objOutlookRecip In .Recipients
    objOutlookRecip.Resolve
    Next

    ' Should we display the message before sending?
    If blnShowEmailBodyWithoutSending Then
    .Display
    Else
    .Save
    .Send
    End If
    End With

    Set objOutlook = Nothing
    Set objOutlookMsg = Nothing
    Set objOutlookAttach = Nothing
    Set objOutlookRecip = Nothing

    End Sub

    Function RangetoHTML(rng As Range)

    ' Works in Excel 2000, Excel 2002, Excel 2003, Excel 2007, Excel 2010, Outlook 2000, Outlook 2002, Outlook 2003, Outlook 2007, and Outlook 2010.
    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook

    TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"

    ' Copy the range and create a workbook to receive the data.
    rng.Copy
    Set TempWB = Workbooks.Add(1)
    With TempWB.Sheets(1)
    .Cells(1).PasteSpecial Paste:=8
    .Cells(1).PasteSpecial xlPasteValues, , False, False
    .Cells(1).PasteSpecial xlPasteFormats, , False, False
    .Cells(1).Select
    Application.CutCopyMode = False
    On Error Resume Next
    .DrawingObjects.Visible = True
    .DrawingObjects.Delete
    On Error GoTo 0
    End With

    ' Publish the sheet to an .htm file.
    With TempWB.PublishObjects.Add( _
    SourceType:=xlSourceRange, _
    Filename:=TempFile, _
    Sheet:=TempWB.Sheets(1).Name, _
    Source:=TempWB.Sheets(1).UsedRange.Address, _
    HtmlType:=xlHtmlStatic)
    .Publish (True)
    End With

    ' Read all data from the .htm file into the RangetoHTML subroutine.
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.ReadAll
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
    "align=left x:publishsource=")

    ' Close TempWB.
    TempWB.Close savechanges:=False

    ' Delete the htm file.
    Kill TempFile

    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing

    End Function

  • lappy

    őstag

    válasz Oly #14579 üzenetére

    Private Declare Function SetCurrentDirectoryA Lib _
    "kernel32" (ByVal lpPathName As String) As Long

    Sub ChDirNet(szPath As String)
    SetCurrentDirectoryA szPath
    End Sub

    Sub Combine_Workbooks_Select_Files()
    Dim MyPath As String
    Dim SourceRcount As Long, Fnum As Long
    Dim mybook As Workbook, BaseWks As Worksheet
    Dim sourceRange As Range, destrange As Range
    Dim rnum As Long, CalcMode As Long
    Dim SaveDriveDir As String
    Dim FName As Variant

    With Application
    CalcMode = .Calculation
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .EnableEvents = False
    End With

    SaveDriveDir = CurDir
    ChDirNet "C:\"

    FName = Application.GetOpenFilename(filefilter:="Excel Files (*.xl*), *.xl*", _
    MultiSelect:=True)
    If IsArray(FName) Then
    Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
    rnum = 1
    For Fnum = LBound(FName) To UBound(FName)
    Set mybook = Nothing
    On Error Resume Next
    Set mybook = Workbooks.Open(FName(Fnum))
    On Error GoTo 0
    If Not mybook Is Nothing Then
    On Error Resume Next
    With mybook.Worksheets(1)
    Set sourceRange = .Range("A1:A25")
    End With
    If Err.Number > 0 Then
    Err.Clear
    Set sourceRange = Nothing
    Else
    If sourceRange.Columns.Count >= BaseWks.Columns.Count Then
    Set sourceRange = Nothing
    End If
    End If
    On Error GoTo 0

    If Not sourceRange Is Nothing Then

    SourceRcount = sourceRange.Rows.Count

    If rnum + SourceRcount >= BaseWks.Rows.Count Then
    MsgBox "Not enough rows in the sheet. "
    BaseWks.Columns.AutoFit
    mybook.Close savechanges:=False
    GoTo ExitTheSub
    Else
    Set destrange = BaseWks.Range("A" & rnum)
    With sourceRange
    Set destrange = destrange. _
    Resize(.Rows.Count, .Columns.Count)
    End With
    destrange.Value = sourceRange.Value

    rnum = rnum + SourceRcount
    End If
    End If
    mybook.Close savechanges:=False
    End If
    Next Fnum
    BaseWks.Columns.AutoFit
    End If
    ExitTheSub:
    With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = CalcMode
    End With
    ChDirNet SaveDriveDir
    End Sub

  • lappy

    őstag

    válasz lacipapi #14530 üzenetére

    Szia!
    Sub SaveWorkbookBackup()
    Dim awb As Workbook, BackupFileName As String, i As Integer, OK As Boolean
    If TypeName(ActiveWorkbook) = "Nothing" Then Exit Sub
    Set awb = ActiveWorkbook
    If awb.Path = "" Then
    Application.Dialogs(xlDialogSaveAs).Show
    Else
    BackupFileName = awb.FullName
    i = 0
    While InStr(i + 1, BackupFileName, ".") > 0
    i = InStr(i + 1, BackupFileName, ".")
    Wend
    If i > 0 Then BackupFileName = Left(BackupFileName, i - 1)
    BackupFileName = BackupFileName & "_masolat" & ".xls"
    OK = False
    On Error GoTo NotAbleToSave
    With awb
    Application.StatusBar = "Munkafüzet mentése"
    .Save
    Application.StatusBar = "Munkafüzet mentése..."
    .SaveCopyAs BackupFileName
    OK = True
    End With
    End If
    NotAbleToSave:
    Set awb = Nothing
    Application.StatusBar = False
    If Not OK Then
    MsgBox "Biztonsági másolat nem kerül mentésre!", vbExclamation, ThisWorkbook.Name
    End If
    End Sub

  • bugizozi

    őstag

    válasz thee #14501 üzenetére

    Google, első találata...
    Egyszerű de használható megoldás :K

    On Error Resume Next
    MkDir "C:\mappanev"
    On Error Goto 0

  • bugizozi

    őstag

    válasz bozsozso #14401 üzenetére

    szerintem ebből ki tudsz indulni

    Dim wsSheet As Worksheet
    On Error Resume Next
    Set wsSheet = Sheets("Munka1")
    On Error GoTo 0
    If Not wsSheet Is Nothing Then
    MsgBox "I do exist"
    Else
    MsgBox "I do NOT exist"
    End If

  • lappy

    őstag

    válasz D@ni88 #14257 üzenetére

    Szia!
    itt van egy txt beolvasó

    Public Sub ImportTextFile(FName As String, Sep As String)

    Dim RowNdx As Long
    Dim ColNdx As Integer
    Dim TempVal As Variant
    Dim WholeLine As String
    Dim Pos As Integer
    Dim NextPos As Integer
    Dim SaveColNdx As Integer

    Application.ScreenUpdating = False
    'On Error GoTo EndMacro:

    SaveColNdx = ActiveCell.Column
    RowNdx = ActiveCell.Row

    Open FName For Input Access Read As #1

    While Not EOF(1)
    Line Input #1, WholeLine
    If Right(WholeLine, 1) <> Sep Then
    WholeLine = WholeLine & Sep
    End If
    ColNdx = SaveColNdx
    Pos = 1
    NextPos = InStr(Pos, WholeLine, Sep)
    While NextPos >= 1
    TempVal = Mid(WholeLine, Pos, NextPos - Pos)
    Cells(RowNdx, ColNdx).Value = TempVal
    Pos = NextPos + 1
    ColNdx = ColNdx + 1
    NextPos = InStr(Pos, WholeLine, Sep)
    Wend
    RowNdx = RowNdx + 1
    Wend

    EndMacro:
    On Error GoTo 0
    Application.ScreenUpdating = True
    Close #1

    End Sub

    Sub DoTheImport()
    Dim FileName As Variant
    Dim Sep As String
    FileName = Application.GetOpenFilename(FileFilter:="Text File (*.txt),*.txt")
    If FileName = False Then
    ''''''''''''''''''''''''''
    ' user cancelled, get out
    ''''''''''''''''''''''''''
    Exit Sub
    End If
    Sep = Application.InputBox("Írjon be egy elválasztó karaktert.", Type:=2)
    If Sep = vbNullString Then
    ''''''''''''''''''''''''''
    ' user cancelled, get out
    ''''''''''''''''''''''''''
    Exit Sub
    End If
    Debug.Print "FileName: " & FileName, "Separator: " & Sep
    ImportTextFile FName:=CStr(FileName), Sep:=CStr(Sep)
    End Sub

  • Delila_1

    veterán

    válasz Bocimaster #13667 üzenetére

    A napokban írtam valakinek erre a feladatra egy makrót. Nála az azonosító, ami Nálad a telephely, az A oszlopban van.

    A makró telephelyenként szétdobja külön lapokra a Munka1 lap adatait, majd minden lapot áttesz külön füzetbe, és a telephely nevén lementi. Írtam bele megjegyzéseket, aszerint módosíts a makrón.

    Sub Telephelyek()
    Dim sor As Double, usor As Double, usor_1 As Double, nev$, WS1 As Worksheet
    Dim utvonal$, lap%

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    utvonal = "E:\Eadat\" 'itt írd be a saját útvonaladat ehelyett, ügyelj a \ jelekre
    usor = Cells(Rows.Count, "A").End(xlUp).Row
    Set WS1 = Sheets("Munka1") 'ide jön a saját indító lap%od neve

    'Másolás lap%okra
    For sor = 2 To usor
    nev$ = WS1.Cells(sor, 1)
    On Error GoTo Uj_lap
    usor_1 = Sheets(nev$).Cells(Rows.Count, "A").End(xlUp).Row + 1

    'a következő 2 sorban írd át a "K"-t az utolsó oszlopod azonosítójára
    If usor_1 = 2 Then Range(WS1.Cells(1, "A"), WS1.Cells(1, "K")).Copy Sheets(nev$).Cells(1)
    Range(WS1.Cells(sor, "A"), WS1.Cells(sor, "K")).Copy Sheets(nev$).Cells(usor_1, "A")
    Next

    '**********************************************************************************************
    'Ha nem kell külön füzetekbe menteni a lapokat, ezt a részt hagyd ki
    'Mentés, zárás
    For lap% = 1 To Sheets.Count - 1
    nev$ = utvonal & Sheets(1).Cells(2, "A")
    Sheets(1).Move

    ActiveWorkbook.SaveAs Filename:=nev$, FileFormat:=xlNormal _
    , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
    CreateBackup:=False
    ActiveWindow.Close
    Next
    '**********************************************************************************************

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    MsgBox "Kész"
    Exit Sub

    Uj_lap:
    If Err = 9 Then
    Worksheets.Add.Name = nev$
    Resume 0
    Else
    Error Err
    End If

    End Sub

  • Delila_1

    veterán

    válasz zhari #13544 üzenetére

    Ez a makró megcsinálja. Előbb új lapokra másolja az egyes sorokat, mindegyiket olyan nevű lapra, amilyen adatot tartalmaz az adott sor első (A) cellája.
    Ezután az egyes lapokat áthelyezi 1-1 új fájlba, aminek a neve a lapnév + "_adott adat".

    Az utvonal = "E:\Eadat\" sorban írd át az útvonalat a sajátodra, a végén is legyen \ jel, mint itt.
    A nev$ = utvonal & Sheets(1).Name & "_adott adat.xls" sor végén az .xls helyett írj .xlsx-et, ha 2003-asnál magasabb verziót alkalmazol.

    Címsort feltételezek, ezért az első ciklust (sorok másolása másik lapokra) a 2. sortól kezdtem a For sor% = 2 To usor% sorban. Címsor nélkül legyen ez a sor For sor% = 1 To usor%.

    Sub Ujak()
    Dim sor%, usor%, usor_1%, nev$, WS1 As Worksheet
    Dim utvonal$, lap%

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    utvonal = "E:\Eadat\" 'Itt írd be a saját útvonaladat ehelyett
    usor% = Cells(Rows.Count, "A").End(xlUp).Row
    Set WS1 = Sheets("Kezdőlap")

    For sor% = 2 To usor%
    nev$ = WS1.Cells(sor%, "A")
    On Error GoTo Uj_lap
    usor_1% = Sheets(nev$).Cells(Rows.Count, "A").End(xlUp).Row + 1
    WS1.Rows(sor%).Copy Sheets(nev$).Cells(usor_1%, "A")
    Next


    For lap% = 1 To Sheets.Count - 1
    nev$ = utvonal & Sheets(1).Name & "_adott adat.xls"
    Sheets(1).Move

    ActiveWorkbook.SaveAs Filename:=nev$, FileFormat:=xlNormal _
    , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
    CreateBackup:=False
    ActiveWindow.Close
    Next

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    MsgBox "Kész"
    Exit Sub

    Uj_lap:
    If Err = 9 Then
    Worksheets.Add.Name = nev$
    Resume 0
    Else
    Error Err
    End If

    End Sub

  • Delila_1

    veterán

    válasz plaschil #13220 üzenetére

    A makró az N oszlopba kigyűjti az A oszlopban lévő szövegeket, és mindegyik mellé beírja csökkenő sorrendben a hozzá tartozó top5-öt az O:S oszlopba.
    Ha 100-nál több féle adatod lehet az A oszlopban, a makróban jelzett sorban írhatod át.

    Sub Top5()
    Dim sor As Long, sor1 As Long
    Dim usor As Long, usor1, cim, ertek
    Dim T(100, 5) '***** Itt írd át a 100-at *****
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    usor = ActiveSheet.UsedRange.Rows.Count
    Columns("A:A").Select
    Range("A1:A" & usor).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
    "N1"), Unique:=True

    usor1 = Range("N1").End(xlDown).Row
    For sor1 = 2 To usor1
    cim = Cells(sor1, 14)
    For sor = 2 To usor
    ertek = Cells(sor, 2)
    If Cells(sor, 1) = cim Then
    If ertek > T(sor1 - 1, 1) Then
    T(sor1 - 1, 5) = T(sor1 - 1, 4)
    T(sor1 - 1, 4) = T(sor1 - 1, 3)
    T(sor1 - 1, 3) = T(sor1 - 1, 2)
    T(sor1 - 1, 2) = T(sor1 - 1, 1)
    T(sor1 - 1, 1) = ertek
    GoTo Köv
    End If
    If ertek > T(sor1 - 1, 2) Then
    T(sor1 - 1, 5) = T(sor1 - 1, 4)
    T(sor1 - 1, 4) = T(sor1 - 1, 3)
    T(sor1 - 1, 3) = T(sor1 - 1, 2)
    T(sor1 - 1, 2) = ertek
    GoTo Köv
    End If
    If ertek > T(sor1 - 1, 3) Then
    T(sor1 - 1, 5) = T(sor1 - 1, 4)
    T(sor1 - 1, 4) = T(sor1 - 1, 3)
    T(sor1 - 1, 3) = T(sor1 - 1, 2)
    T(sor1 - 1, 3) = ertek
    GoTo Köv
    End If
    If ertek > T(sor1 - 1, 4) Then
    T(sor1 - 1, 5) = T(sor1 - 1, 4)
    T(sor1 - 1, 4) = T(sor1 - 1, 3)
    T(sor1 - 1, 4) = ertek
    GoTo Köv
    End If
    If ertek > T(sor1 - 1, 5) Then T(sor1 - 1, 5) = ertek
    End If
    Köv:
    Next
    Range("O" & sor1) = T(sor1 - 1, 1)
    Range("P" & sor1) = T(sor1 - 1, 2)
    Range("Q" & sor1) = T(sor1 - 1, 3)
    Range("R" & sor1) = T(sor1 - 1, 4)
    Range("S" & sor1) = T(sor1 - 1, 5)
    Next

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

    End Sub

  • Fire/SOUL/CD

    félisten

    válasz föccer #12909 üzenetére

    Ez meg egy makrós megoldás.

    Function CountOfDistinctValues(MyTypeSrcRange As Range) As Long

    Dim MyCollection As New Collection
    Dim MyCell As Range
    Dim MyTypeSrcRange As Range

    Application.Volatile
    For Each MyCell In MyTypeSrcRange
    On Error Resume Next
    MyCollection.Add MyCell.Value, CStr(MyCell.Value)
    Next MyCell
    On Error GoTo 0
    CountOfDistinctValues = MyCollection.Values.Count

    End Function

    Sajnos most nem tudom tesztelni(nincs Office a gépen), csak megírtam, remélhetőleg így is működik...

  • Delila_1

    veterán

    válasz mr.nagy #11565 üzenetére

    Teszteld ezzel. Csak estefelé leszek gép közelében, addig biztosan kibuknak a hibák.
    A makró első részében (a **-os sorig) az első lap 100. oszlopába teszek egy x-et ahhoz, hogy a második rész gyorsabb futású legyen. Ezt az oszlopot a végén törlöm. Ha foglalt a 100. oszlop (CV), a 100-at a replace funkcióval írd át egy üres oszlop számára. Négy helyen szerepel.

    Sub szamitas()
    Dim WS1 As Worksheet, WS2 As Worksheet, sor%, usor1%, usor2%, lel

    Set WS1 = Sheets("első")
    Set WS2 = Sheets("második")
    WS2.Select

    usor1% = Range("G2").End(xlDown).Row
    For sor% = 2 To usor1%
    On Error GoTo Köv
    lel = WS1.Range("E:E").Find(Cells(sor%, "E")).Row
    Select Case WS1.Cells(lel, 1)
    Case 380
    Cells(sor%, 7) = WS1.Cells(lel, 7) + Cells(sor%, 7)
    WS1.Cells(lel, 100) = "x"
    Case 390
    Cells(sor%, 7) = WS1.Cells(lel, 7) - Cells(sor%, 7)
    WS1.Cells(lel, 100) = "x"

    End Select
    Köv:
    Next
    '***************************************************************************
    WS1.Select
    usor1% = Range("A2").End(xlDown).Row

    For sor% = 2 To usor1%
    If Cells(sor%, 1) = 380 And Cells(sor%, 100) <> "x" Then
    usor2% = WS2.Range("E2").End(xlDown).Row + 1
    Range(Cells(sor%, 2), Cells(sor%, 5)).Copy WS2.Cells(usor2%, 2)
    Cells(sor%, 7).Copy WS2.Cells(usor2%, 7)
    End If
    Next
    Columns(100) = ""
    End Sub

  • Delila_1

    veterán

    válasz MaciLaci68 #11503 üzenetére

    Miért is van erre szükség? Hiszen ha van az aktív cellának neve, akkor a szerkesztőléc bal oldalán láthatod kiírva.

    Ez a makró is végig böngészi a neveket, csak egy kicsit gyorsabban.

    Sub CellaNeve()
    Dim i As Long
    For i = 1 To ActiveWorkbook.Names.Count
    On Error GoTo Hiba
    If ActiveWorkbook.Names(i).RefersToLocal = Selection.Name Then
    Range("A1") = ActiveWorkbook.Names(i).Name
    Exit Sub
    End If
    Next

    Hiba:
    Cells(1) = "A " & ActiveCell.Address & " cella nincs elnevezve"
    End Sub

  • Delila_1

    veterán

    válasz DopeBob #11490 üzenetére

    Próbáld meg ezzel:

    Sub MelyikHiányzik()
    Dim sz%, sor As Long
    For sz% = 1 To Cells(Rows.Count, "A").End(xlUp).Row
    On Error GoTo Hiba
    sor = Application.Match(sz%, Range("A:A"), 0)
    Next
    Hiba:
    MsgBox sz%
    End Sub

    Az Msgbox helyett beírathatod egy cellába.

  • Fire/SOUL/CD

    félisten

    válasz Oly #10372 üzenetére

    Előbbire nem tudok így hirtelen mit mondani, másodikra viszont igen:

    Private Sub CommandButton1_Click()

    Dim MyApplication As Object
    Set MyApplication = CreateObject("Shell.Application"). _
    BrowseForFolder(0, "Kérem válasszon egy mappát...", 0, OpenAt)

    On Error Resume Next
    MsgBox (MyApplication.self.Path)
    On Error GoTo 0

    Set MyApplication = Nothing

    End Sub

  • Fire/SOUL/CD

    félisten

    válasz Oly #10201 üzenetére

    Annyit had javasoljak, hogy a Goto utasítást csak akkor használd, ha nincs más. A strukturált nyelvek esetén a Goto 99%-ban nem szükséges.

    If Len(Dir(Cells(7, 26))) = 0 Then GoTo dirmakego
    GoTo csvmakego

    Egy ilyen szerkezet, minden vizsgán (bármely strukturált nyelvről is legyen szó) elégtelen... ;] (a többiről a kódodban nem is beszélve)
    (És hidd el, nem elfogultságból mondom, mivel kb 6 évet Assembly-ben dolgoztam, ott meg csak ugró utasítások vannak)

    Javaslom nézz utána az If...Else...EndIf struktúrának, mert szörnyen használod jelenleg... :DDD

  • Oly

    őstag

    válasz perfag #10199 üzenetére

    Köszi

    Meg is csináltam:

    Dim biztos As String
    biztos = MsgBox("Létrehozzuk a CSV file-t?", vbQuestion + vbYesNo, "Megerősítés")
    If biztos = vbNo Then GoTo vege
    If Len(Dir(Cells(7, 26))) = 0 Then GoTo dirmakego
    GoTo csvmakego
    dirmakego:
    Dim dirmake As String
    dirmake = MsgBox("A megadott elérési útvonal (" & Cells(7, 26) & ") nem létezik. Létrehozzuk most?", vbQuestion + vbYesNo, "Hiba")
    If dirmake = vbNo Then GoTo vege
    MkDir Cells(7, 26)
    MsgBox "A " & Cells(7, 26) & " mappa létrehozva."
    csvmakego:
    Dim FNV$
    Dim FN$
    filego:
    FNV$ = InputBox("Kérem a fájl nevét!", "Fájl neve")
    FN$ = Cells(7, 26) & Format(Now(), "mmdd") & FNV$ & ".csv"
    If Len(Dir(FN$)) = 0 Then GoTo nincsilyen
    Dim felulir As String
    felulir = MsgBox("A file (" & FN$ & ") már létezik! Felülírjuk?", vbQuestion + vbYesNo, "Megerősítés")
    If felulir = vbNo Then GoTo filego
    nincsilyen:
    Application.DisplayAlerts = False
    Sheets("table").Select
    Sheets("table").Copy
    ActiveWorkbook.SaveAs Filename:=FN$, FileFormat:=xlCSV, _
    CreateBackup:=False, Local:=True
    ActiveWindow.Close
    Sheets("make").Select
    Range("A11").Select
    If Err.Number <> 0 Then
    MsgBox "Akkor fuss neki újra! :)"
    Else
    MsgBox "A file lértehozva: " & FN$, vbInformation, "Sikeresen létrehozva"

    End If
    vege:
    End Sub

  • m.zmrzlina

    senior tag

    válasz Sir Pocok #9801 üzenetére

    Nem állítom, hogy hibátlan de kiindulásnak jó lesz aztán majd pontosítasz, hogy mit szeretnél:

    Sub kerescserel()
    Dim amitkeres As String, amirecserel As String

    Cells(1, 1).Select
    amitkeres = InputBox("Add meg a keresni kívánt számot!", "Keresés")
    amirecserel = InputBox("Mire szeretnéd cserélni?", "Keresés")

    Do Until IsEmpty(ActiveCell.Offset(1, 0)) = True
    On Error GoTo nincstobb
    Cells.Find(What:=amitkeres, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Select
    If ActiveCell.Value = amitkeres Then ActiveCell.Value = amirecserel
    Loop

    nincstobb:
    MsgBox ("A számok cseréje megtörtént.")
    End Sub

    Az A1 cellától keres lefelé a legutolsóig és ha megtalálta az első inputboxban bevitt karaktersorozatot akkor kicseréli arra amit a második inputboxban bevittél. Ez kicsit gyorsabb mint a beépített (Ctrl+H) módszer.

  • m.zmrzlina

    senior tag

    válasz Fire/SOUL/CD #9492 üzenetére

    Ezt nem igazán értem. Próbáltam Inputboxra alkalmazni de nem ment.

    Ide kellene valahogy beilleszteni:

    Private Sub CommandButton1_Click()
    Dim tech As String

    start:
    tech = InputBox("Add meg a technikus nevét!" + Chr(13) + Chr(13) + "A lista törléséhez nyomj < SPACE >-t!")

    If InStr(tech, " ") = 1 Then tech = " " Else tech = tech
    If tech = vbCancel Then Exit Sub

    Select Case tech
    ' Case Is = vbCancel
    ' Exit Sub
    Case Is = " "
    GoTo clearcontent
    Case Is = ""
    MsgBox "Nem adtad meg a technikus nevét!", vbCritical, "Hiányzó adat!"
    GoTo start
    Case Is <> ""
    GoTo paste_list

    End Select

  • m.zmrzlina

    senior tag

    Ötletre volna szükségem.

    A következő kód egy ActiveX parancsgombhoz van rendelve és azt csinálja, (meg még sok minden mást de ez most nem érdekes) hogy a vágólapról megfelelő helyre beilleszt egy 1 oszlop széles változó hosszúságú tartományt, vagy ha a felhasználó <Szóköz>-t nyom akkor törli a meglévőt, vagy nem engedi elfelejteni a "névadást"(Select Case 2. ág)

    Private Sub CommandButton1_Click()
    Dim tech As String

    start:
    tech = InputBox("Add meg a technikus nevét!" + Chr(13) + Chr(13) + "A lista törléséhez nyomj < SPACE >-t!")

    Select Case tech

    Case Is = " "
    GoTo clearcontent
    Case Is = ""
    MsgBox "Nem adtad meg a technikus nevét!" + Chr(13) + Chr(13) + "Pótold a hiányosságot!", vbCritical, "Hiányzó adat!"
    GoTo start
    Case Is <> ""
    GoTo paste_list

    End Select

    paste_list:
    Application.ScreenUpdating = False

    CommandButton1.Caption = tech
    Cells(2, 2).Value = tech
    Cells(4, 2).Select

    On Error Resume Next
    Selection.PasteSpecial Paste:=xlPasteAll
    If Err.Number <> 0 Then
    MsgBox "Jelöld ki a panellistát!" & Chr(13) & "Hibakód:" & Err.Number, vbCritical, "Hiba!!!"
    Cells(2, 2).Select
    Range(ActiveCell, ActiveCell.End(xlDown)).ClearContents
    CommandButton1.Caption = "Tech_1"
    Exit Sub
    End If

    'stb...stb...stb...

    Az a gondom, hogy ha a felhasználó izgalmában véletlenül több szóközt nyom egy helyett akkor nem a régi lista törlése történik hanem beilleszti a vágólapot úgy hogy a parancsgomb felirata " "(kvázi semmi) lesz ami kód szempontjából egy teljesen normális működés de nem ez a cél.

    Ezt a felhasználói hibát kellene lekezelni a legegyszerűbben. Nem baj ha nem <Szóköz>-zel törlünk, lehet akár <Del> vagy <Backspace> is.

    Hogyan lehet ezt megoldani?

  • Delila_1

    veterán

    válasz Fire/SOUL/CD #9360 üzenetére

    Szerintem elég ennyi, mivel 1 név csak 1× szerepel a C2:CX2 tartományban:

    Sub Keres()
    Range("C2:CX2").Select
    amitkeres = InputBox("Add meg a keresni kívánt nevet!", "Keresés")

    On Error GoTo Nincs
    Selection.Find(What:=amitkeres, After:=ActiveCell, LookIn:=xlValues, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Select
    Selection.Font.Bold = True
    Exit Sub
    Nincs:
    MsgBox ("A keresett név nincs a listában.")
    End Sub

    A lényeg, hogy kijelölöm a tartományt, és NEM Cells.Find, hanem Selection.Find legyen a kereső sor.

  • Fire/SOUL/CD

    félisten

    válasz m.zmrzlina #9359 üzenetére

    Akkor talán így

    Sub find()

    eleje:
    On Error Resume Next
    Cells(2, 3).Activate
    amitkeres = InputBox("Add meg a keresni kívánt nevet!", "Keresés", amitkeres, 13000, 100)
    Cells.find(What:=amitkeres, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
    If Err.Number <> 0 Or ActiveCell.Row <> 2 Then
    MsgBox ("A keresett név nincs a listában.")
    GoTo eleje
    End If

    End Sub

  • m.zmrzlina

    senior tag

    válasz Fire/SOUL/CD #9354 üzenetére

    Ezt sikerült kiötleni, úgy tűnik működik.

    Sub find()

    eleje:
    Cells(2, 3).Activate

    amitkeres = InputBox("Add meg a keresni kívánt nevet!", "Keresés", amitkeres, 13000, 100)

    On Error Resume Next

    Cells.find(What:=amitkeres, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate

    If Err.Number = 91 Then
    MsgBox ("A keresett név nincs a listában.")
    GoTo eleje
    End If

    If ActiveCell.Row <> 2 Then
    Cells(2, 3).Activate
    MsgBox ("A keresett név nincs a listában.")
    GoTo eleje
    End If

    End Sub

    Működni működik de jó ez így?

  • m.zmrzlina

    senior tag

    válasz m.zmrzlina #9348 üzenetére

    Érdekes, hogy második alkalommal is az On Error GoTo uzenet utáni sor okozza a hibát mint elsőre de először el tud menni az uzenet: címkére másodszor már nem.Akkor sem ha nem ugyanaz az inputbox tartalma mint először.

    Magyarul, ha kétszer gépeli el a júzer a nevet akkor ugyanúgy kiakad a kód mintha nem is lenne benne hibakezelés. :((

  • m.zmrzlina

    senior tag

    válasz pirit28 #9338 üzenetére

    Ha egy név csak egyszer szerepel a listában akkor lehet ez egy megoldás:

    Sub find()

    eleje:
    Cells(2, 3).Activate
    amitkeres = InputBox("Add meg a keresni kívánt nevet, vagy név részletet!", "Keresés", amitkeres)
    On Error GoTo uzenet

    Cells.find(What:=amitkeres, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate

    If ActiveCell.Row <> 2 Then
    Cells(2, 3).Activate
    GoTo uzenet
    End If

    Exit Sub

    uzenet:
    MsgBox ("A keresett név nincs a listában.")
    GoTo eleje

    End Sub

    Nincs bolondbiztossá téve még, csak próbálkozom.

  • Heno1974

    csendes tag

    syasztok.tudna nekem segítteni valaki??
    sub szürés ()

    For k = 1 To 2000
    Let x = ActiveCell

    ActiveCell.Offset(1, 0).Range("A1").Select
    Let y = ActiveCell
    If y = "" Then
    GoTo TestforBlank
    End If
    If x = y Then
    Selection.EntireRow.Delete
    ActiveCell.Offset(-1, 0).Range("A1").Select

    End If

    Next k

    TestforBlank:
    End sub

    a K val áll i hibával,
    szürni szeretnék 2003 excelbe, hogy az ismétlődéseket távolítsa el .
    azt is meg kéne adni, hogy ha nincs adat akkor fejezze be a szürést.
    valahogy igy kellene asszem:
    For k <> "null"
    ha jól tudom.
    számokat kéne szürnöm, de K nál kiáll hibával :(

  • m.zmrzlina

    senior tag

    A következő kódrészlettel az a bajom, hogy az a sor amivel egy másik munkafüzetben végzett kijelölést értékként akarok beilleszteni 1004-es hibakóddal kiakad. A makró munkafüzetében tett kijelölést hiba nélkül értékként is be tudja illeszteni.

    Az xlPasteAll viszont így is úgy is gond nélkül lefut.

    Mi lehet az oka, merre keresgéljek? A cél az lenne, hogy a másik munkafüzet kijelölését értékként lehessen beilleszteni.

    paste_list:
    Application.ScreenUpdating = False

    CommandButton1.Caption = tech
    Cells(2, 2).Value = tech
    Cells(4, 2).Select
    On Error GoTo error_1
    Selection.PasteSpecial Paste:=xlPasteAll
    'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Selection.Cells(Selection.Rows.Count + 1, 1).Select

    If ActiveCell.Value <> "" Then
    Range(ActiveCell, ActiveCell.End(xlDown)).Select
    End If
    ....stb
    ....stb

  • m.zmrzlina

    senior tag

    Van egy makróm ami azt csinálja, hogy a felhasználó által egy txt fájlban kijelölt szöveget beilleszti egy munkalapra elvégez bizonyos ellenőrzéseket majd megformázza.

    A következő módszerrel egy felhasználói hibát szeretnék kezelni ami abból adódik, hogy nem tett semmit a vágólapra mielőtt elindította a makrót. Így szeretném csinálni:

    Cells(1, 1).Select
    On Error GoTo hiba
    ActiveSheet.Paste

    'további utasítások (jó ág)

    hiba: 'hiba ág
    MsgBox "Nincs mit beilleszteni." + Chr(13) + "Végezd el a kijelölést!", vbCritical, "Figyelem !!!"

    Exit Sub

    Ez most úgy működik, hogy akár üres a vágólap akár nem a hibaüzenet mindenképpen megjelenik és folytatódik tovább a program. Mintha mindkét ág lefutna függetlenül attól hogy volt-e hiba vagy sem.

    Mit rontok el?

  • Fire/SOUL/CD

    félisten

    válasz zsotesz81 #8456 üzenetére

    Hali!

    Ebből a kódból az alábbi részből meríthetsz ihletet

    On Error Resume Next
    Set My_Sheet = Sheets(My_Sheet_Name)
    On Error GoTo 0
    If Not My_Sheet Is Nothing Then
    My_Sheet.Delete
    End If

    Ez létező munkalap esetén törli azt, egy kis átalakítással neked is megfelelhet, de ez függ a programod felépítésétől.

    Másik alapmódszer az szokott lenni, hogy egy ciklussal végigmész a munkalapokon, a cikluson belül megvizsgálod a nevét, ha megegyezik, akkor valamilyen változót magasra állítasz és kilépsz a ciklusból. Ezt követően megvizsgálod azt a bizonyos változót, éa feltételnek megfelelően kihagysz programrészt.

    Fire.

  • perfag

    aktív tag

    válasz m.zmrzlina #8449 üzenetére

    A Microsoft támogatás szerint "a line label defined in another procedure, you receive the error message "Label not defined." This message means that the label is not defined in the current Sub or Function." ez nem fog menni.
    Megoldást én az Error Handling-ot felhasználva keresnék, Chip Pearson ezt írja: "Every procedure need not have a error code. When an error occurs, VBA uses the last On Error statement to direct code execution. If the code causing the error is in a procedure with an On Error statement, error handling is as described in the above section. However, if the procedure in which the error occurs does not have an error handler, VBA looks backwards through the procedure calls which lead to the erroneous code."
    Az Err.Number-nek utánanéznék, milyen saját értéket adhatnék és ezzel vissza tudnék térni a főciklus ErrorHandlerébe, ahol egy GoTo, vagy GoSub a kívánt helyre vinné a vezérlést.

  • m.zmrzlina

    senior tag

    válasz Delila_1 #8448 üzenetére

    A kód szerkezete olyan, hogy van egy főciklus ami vegyesen tartalmaz szubrutin hívásokat és programsorokat is.

    A probléma ott kezdődik, ha egy szubrutinban bekövetkezett feltétel esetén a főciklus megadott pontján szeretném folytatni a program futását.

    Ha egy cikluson belül vagyok akkor GoTo címke és készen van. Azonban ha a cimke a szubrutinon kívül van akkor jön ez a hibaüzenet.

    Gondoltam van valami módja ennek a teljes munkafüzetre kiterjedő cimke megadásának ahhoz hasonlóan mint hogy változót is másképp kell deklarálni, ha nem csak egy szubrutinban akarom használni.

  • m.zmrzlina

    senior tag

    Do
    ActiveCell.Offset(1, 0).Select
    If ActiveCell.Value = "" Then

    Select Case Params
    Case Is = 1
    Cells(1 + Params, columnid_1).Select
    cikl = columnid_1
    Case Is = 2
    Cells(1 + Params, columnid_2).Select
    cikl = columnid_2
    Case Is = 3
    Cells(1 + Params, columnid_3).Select
    cikl = columnid_3
    Case Is = 4
    Cells(1 + Params, columnid_4).Select
    cikl = columnid_4
    Case Is = 5
    Cells(1 + Params, columnid_5).Select
    cikl = columnid_5
    Case Else
    Range("I1").Select
    End Select

    For k = cikl To 1440
    With Selection.Interior
    .Pattern = xlSolid
    .ColorIndex = 4
    .TintAndShade = 0
    .PatternTintAndShade = 0
    End With
    ActiveCell.Offset(0, 1).Select
    Next k
    Else Goto start
    Loop Until Mid(ActiveCell.Text, 13, 1) = Params

    A fenti programrészlet Futtatáskor a következő hibaüzenetet adja
    LOOP without DO

    Mi lehet az oka?
    Próbáltam már kikommentezni a Case szerkezetet és a ciklust is de nem jöttem rá mi kavar be.

  • Fire/SOUL/CD

    félisten

    válasz Fire/SOUL/CD #8352 üzenetére

    Hali!

    Private Sub CommandButton1_Click()

    Dim My_Sheet As Worksheet
    Dim My_Sheet_Name As String
    Dim My_Range As Range
    Dim My_Column As String

    'Oszlop, amelyikben szállítólevélszámok vannak
    '(Ugyanebben az oszlopban lesznek majd, az új munkalapon is)
    My_Column = "D"
    'Az első adat az oszlopban
    My_Row = 2
    'A létrehozandó, összesítő munkalap neve
    My_Sheet_Name = "FSCD_Összesítés"

    Application.DisplayAlerts = False

    On Error Resume Next
    Set My_Sheet = Sheets(My_Sheet_Name)
    On Error GoTo 0
    If Not My_Sheet Is Nothing Then
    My_Sheet.Delete
    End If

    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = My_Sheet_Name
    k = 0
    For i = 1 To Worksheets.Count - 1
    Worksheets(i).Select
    Worksheets(i).Range(My_Column & My_Row).Select
    Set My_Range = Worksheets(i).Range(My_Column & My_Row & ":" & My_Column & Worksheets(i).UsedRange.Rows(Worksheets(i).UsedRange.Rows.Count).Row)
    My_Range.Select
    For Each CurrCell In My_Range
    Worksheets(My_Sheet_Name).Range(My_Column & 1 + k) = CurrCell.Value
    k = k + 1
    Next CurrCell
    Set My_Range = Nothing
    Next i

    Worksheets(My_Sheet_Name).Select

    Set My_Sheet = Nothing

    Application.DisplayAlerts = True

    End Sub

    Fire.

    [ Módosította: Ndruu ]

  • Fire/SOUL/CD

    félisten

    válasz Charlie Gordon #8349 üzenetére

    Hali!

    Oksa, akkor

    1. Készíts másolatot az excel fájlról, biztos ami biztos
    2. Nyisd meg és az első munkalapra tegyél egy CommandButtont
    3. Kattints rá duplán, a megjelenő ablakban törölj mindent és illeszd be az alábbi kódot

    Private Sub CommandButton1_Click()

    Dim My_Sheet As Worksheet
    Dim My_Sheet_Name As String
    Dim My_Range As Range
    Dim My_Column As String

    'Oszlop, amelyikben szállítólevélszámok vannak
    '(Ugyanebben az oszlopban lesznek majd, az új munkalapon is)
    My_Column = "D"
    'A létrehozandó, összesítő munkalap neve
    My_Sheet_Name = "FSCD_Összesítés"

    Application.DisplayAlerts = False

    On Error Resume Next
    Set My_Sheet = Sheets(My_Sheet_Name)
    On Error GoTo 0
    If Not My_Sheet Is Nothing Then
    My_Sheet.Delete
    End If

    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = My_Sheet_Name
    k = 1
    For i = 1 To Worksheets.Count - 1
    Worksheets(i).Select
    Worksheets(i).Range(My_Column & "1").Select
    Set My_Range = Worksheets(i).Range(My_Column & "1:" & My_Column & Worksheets(i).UsedRange.Rows.Count)
    My_Range.Select
    For Each CurrCell In My_Range
    Worksheets(My_Sheet_Name).Range(My_Column & k) = CurrCell.Value
    k = k + 1
    Next CurrCell
    Set My_Range = Nothing
    Next i

    Worksheets(My_Sheet_Name).Select

    Set My_Sheet = Nothing

    Application.DisplayAlerts = True

    End Sub

    4. kattints a CommandButtonra

    Ez a makró létrehoz a munkalapok legvégén egy új munkalapot, abba másolja az adatokat.

    Fire.

  • Delila_1

    veterán

    válasz Oly #8012 üzenetére

    Sub Lapok()
    Dim sheetnev As String
    sheetnev = Cells(1, 10)
    On Error Resume Next
    Sheets(sheetnev).Select
    If Err.Number <> 0 Then
    Worksheets.Add.Name = sheetnev
    Sheets(sheetnev).Cells(3, 1) = 1
    End If
    On Error GoTo 0
    End Sub

  • Delila_1

    veterán

    válasz Oly #8003 üzenetére

    A dátum végére is tegyél pontot a lapneveknél, mert a VB saját változója (Date) is így írja.

    Sub Lapok()
    Dim sheetnev As String
    sheetnev = Date
    On Error Resume Next
    Sheets(sheetnev).Select
    If Err.Number <> 0 Then Worksheets.Add.Name = sheetnev
    On Error GoTo 0
    End Sub

  • Delila_1

    veterán

    válasz motinka #7631 üzenetére

    Több dolgot kellett átírni benne. A Select Case sorban most már nem az A1-et [cells(1)], hanem a B5 cellát [cells(5,2)] kell figyeltetni.
    Az ÖSSZESnél sem írhatsz XX oszlopot. A kiterjesztésből gondolom, hogy a 2007-es verziónál előbbit használsz, ahol az utolsó oszlop az IV.
    A fentieket kijavítva:

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim kezd As String, vég As String

    If Target.Address = "$B$5" Then
    Select Case Cells(5, 2)
    Case "CSABA"
    kezd = "D": vég = "F": GoTo Rejt
    Case "JÁNOS"
    kezd = "G": vég = "I": GoTo Rejt
    Case "FERENC"
    kezd = "J": vég = "L": GoTo Rejt
    Case "LÁSZLÓ"
    kezd = "M": vég = "O": GoTo Rejt
    Case "TIBOR"
    kezd = "P": vég = "R": GoTo Rejt
    Case "ÖSSZES"
    Columns("D:IV").Hidden = False
    End Select
    End If
    Exit Sub

    Rejt:
    Columns("D:IV").Hidden = True
    Columns(kezd & ":" & vég).Hidden = False
    End Sub

  • Fire/SOUL/CD

    félisten

    válasz Delila_1 #7609 üzenetére

    Hali!

    Meg van még egy "hiba" benne, de ez csak akkor okozhat problémát, ha a P oszlop is felhasználásra kerül. Ha László lesz kiválasztva, akkor az MNO oszlopokat kellene csak látni, ellenben a makróban MNOP oszlopok lesznek láthatóak .

    Case "László"
    kezd = "M": vég = "P": GoTo Rejt

    Én sem figyeltem rá tegnap, de mint írtam, ez csak akkor okoz "gondot", ha a P oszlopnak is lesz funkciója, azaz pl bekerül egy újabb név és ahhoz tartozó táblzatoszlopok (PQR). :DDD

    Fire.

  • Fire/SOUL/CD

    félisten

    válasz Fire/SOUL/CD #7605 üzenetére

    Hali!

    Ja nem teljesen azt csinálja, amit kértél "Az összesnél kinyílna a teljes táblázat." kimaradt, úgy hogy Delila_1 utólagos engedélyével beleírtam azt a 2 sort a kódba.
    Neked meg még annyi dolgod lesz, hogy a listában szerepeljen az Összes elem is a neveken kívül.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim kezd As String, vég As String

    If Target.Address = "$A$1" Then
    Select Case Cells(1)
    Case "Csaba"
    kezd = "D": vég = "F": GoTo Rejt
    Case "János"
    kezd = "G": vég = "I": GoTo Rejt
    Case "Ferenc"
    kezd = "J": vég = "L": GoTo Rejt
    Case "László"
    kezd = "M": vég = "P": GoTo Rejt
    Case "Összes"
    Columns("D:O").Hidden = False
    End Select
    End If
    Exit Sub

    Rejt:
    Columns("D:O").Hidden = True
    Columns(kezd & ":" & vég).Hidden = False
    End Sub

    Fire.

  • Delila_1

    veterán

    válasz motinka #7601 üzenetére

    Itt a makró, elég jól látszik belőle, melyik adatokat kell átírnod. A Case utasításokból az End Select sor elé akárhány újat beszúrhatsz. Ennek alapján eldöntheted, mit akarsz később a további adatokhoz idomítani, a különböző nézeteket, vagy a makrót.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim kezd As String, vég As String

    If Target.Address = "$A$1" Then
    Select Case Cells(1)
    Case "Csaba"
    kezd = "D": vég = "F": GoTo Rejt
    Case "János"
    kezd = "G": vég = "I": GoTo Rejt
    Case "Ferenc"
    kezd = "J": vég = "L": GoTo Rejt
    Case "László"
    kezd = "M": vég = "P": GoTo Rejt
    End Select
    End If
    Exit Sub

    Rejt:
    Columns("D:O").Hidden = True
    Columns(kezd & ":" & vég).Hidden = False
    End Sub

    A makrót a kérdéses laphoz kell rendelned. Lapfülön jobb klikk, Kód megjelenítése, a VB szerkesztőben jobb oldalon kapott üres lapra másold be.

    Szerk.: a Columns("D:O").Hidden = True sorban a kettőspont után nem nulla van, hanem O betű, az utolsó felhasznált oszlopod betűjele.

  • Delila_1

    veterán

    válasz nagytomi10 #7088 üzenetére

    Hibakezeléssel:

    Private Sub CommandButton1_Click()

    Application.ScreenUpdating = False

    Sheets("Találatok").Select
    ActiveSheet.Rows("2").Select
    ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp

    sor_k = 2
    sz = Sheets("Munka2").Cells(1)

    Sheets("Munka1").Select

    On Error GoTo Hiba
    Cells.Find(What:=sz, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
    :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate

    sor = Selection.Row: sor_m = sor + 1
    Rows(sor).Copy Sheets("Találatok").Rows(sor_k)
    sor_k = sor_k + 1

    Do 'Keresés ismétlése
    Cells.FindNext(After:=ActiveCell).Activate
    sor = Selection.Row
    Rows(sor).Copy Sheets("Találatok").Rows(sor_k)
    sor_k = sor_k + 1
    Loop While sor >= sor_m

    Sheets("Találatok").Select
    usor = ActiveSheet.UsedRange.Rows.Count + 1
    ActiveSheet.Rows(usor).Select
    Selection.Delete Shift:=xlUp
    ActiveSheet.Cells(1).Select
    Application.ScreenUpdating = True
    Exit Sub

    Hiba:
    MsgBox "Nincs '" & sz & "' érték a Munka1 lapon"

    End Sub

    2003-as verzióban írtam, ahhoz nem kellett az ActiveSheet. Látom, áttetted a Munka2!A1-be a keresendő értéket. Jobb, mert ha az adatok között egyébként nem szerepelne, a Find ezt az egyet megtalálná.

  • Fire/SOUL/CD

    félisten

    válasz Sickboy25 #6859 üzenetére

    Hali!

    Képen

    Makró-kód

    Private Sub Worksheet_Change(ByVal Target As Range)

    X = Range(Target.Address)
    Y = 50
    On Error Resume Next
    If Not Intersect(Range("P3:V25"), Range(Target.Address)) Is Nothing Then
    If X <> "" Then
    Application.EnableEvents = False
    Range(Target.Address) = Y / X * 100
    Application.EnableEvents = True
    End If
    End If
    On Error GoTo 0

    End Sub

    Amit állíthatsz, az az Y(állandó, én most 50-nek vettem) illetve az adattartomány(esetünkben P3:V25). Természetesen ebben a tartományban nem lehet a táblázat fejléce csak számadatok. Amennyiben pl betűt is tartalmaz a cella(mert véletlenül melléütsz), akkor nem történik semmi, bekerül amit beírtál, nyilván nem lehet vele számolni.

    Fire.

    UI: Ha azt akarod kiszámolni, hogy hány százaléka X-nek Y, akkor korábban rossz képletet adtál meg. Helyesen Y/X*100... ;]

  • mr.nagy

    tag

    válasz mr.nagy #6851 üzenetére

    Időközben magam is törtem a felyem és egy ilyen kódot csináltam:
    Private Sub CommandButton1_Click()

    Sheets("tábla").Activate

    On Error Resume Next
    ActiveSheet.Shapes("kép").Select
    Selection.Delete

    On Error GoTo 0

    Dim myPic As Object
    Set myPic = Sheets("tábla").Pictures.Insert(Sheets("adatok").Range("C1"))
    myPic.Left = Sheets("tábla").Range("C5").Left + ((Sheets("tábla").Range("C5").Width - myPic.Width) / 2)
    myPic.Top = Sheets("tábla").Range("C5").Top + ((Sheets("tábla").Range("C5").Height - myPic.Height) / 2)
    myPic.Name = ("kép")
    End Sub

    Eddig úgy tűnik, hogy működik, de ha van jobb özlet nyitott vagyok rá és megköszönöm!

  • Fire/SOUL/CD

    félisten

    válasz sonar #5918 üzenetére

    Hali!

    Látom ulrik19 kolléga megelőzött, de ha már én is megírtam, akkor be is rakom. :DDD Ez Microsoft ActiveX Data Objects 6.0 Library bővítménnyel és adatkapcsolattal, valamint mysql connector ODBC bővítménnyel megtámogatva van elkészítve. Természetesen kifogástalanul működik. Egy excel_mysql nevű adatbázis, test nevű tábláján megy végig és írja ki sorban a mezőket.

    Private Sub CommandButton1_Click()

    Dim FSCD_SQLConnection As ADODB.Connection
    Dim FSCD_Recordset As ADODB.Recordset

    Dim FSCD_SQLConnectionString As String
    Dim FSCD_SQLCommand As String
    Dim FSCD_MYSQL_Table As String

    On Error GoTo FSCD_ErrorHandler

    FSCD_MYSQL_Table = "test"

    FSCD_SQLConnectionString = "Provider=MSDASQL.1;Persist Security Info=True;" & _
    "User ID=root;Extended Properties='';DSN=Excel_MySQL_Tutorial;" & _
    "UID=root;SERVER=127.0.0.1;DATABASE=excel_mysql;PORT=3306;'';" & _
    "Initial Catalog=excel_mysql;Initial Catalog=excel_mysql"

    Set FSCD_SQLConnection = New ADODB.Connection
    FSCD_SQLConnection.ConnectionString = FSCD_SQLConnectionString
    FSCD_SQLConnection.Open

    FSCD_SQLCommand = "SELECT * FROM " & FSCD_MYSQL_Table
    Set FSCD_Recordset = New ADODB.Recordset
    FSCD_Recordset.Open FSCD_SQLCommand, FSCD_SQLConnection

    FSCD_Recordset.MoveFirst
    While Not FSCD_Recordset.EOF
    MsgBox FSCD_Recordset.Fields("mező1").Value
    MsgBox FSCD_Recordset.Fields("mező2").Value
    FSCD_Recordset.MoveNext
    Wend
    FSCD_Recordset.Close
    FSCD_SQLConnection.Close

    Exit Sub

    FSCD_ErrorHandler:

    MsgBox "Error:" & Err.Description, vbCritical, "Fire/SOUL/CD"

    End Sub

    Fire.

  • Cuci3

    tag

    válasz ulrik19 #5817 üzenetére

    Köszi Delilanak, ulrik19-nek! :R Megfogadom ezt a nem Ellenőrzés a munkalap neve elágazást. Ezt tűnik a legjobb választásnak. A Goto sem lenne rossz, de azt szubjektíven nem szeretem. :)

  • Fire/SOUL/CD

    félisten

    válasz Cuci3 #5808 üzenetére

    Hali!

    Sajnos a Pascal vagy C/CPP-ban megszokott Continue utasítás itt nem létezik, helyette a Goto utasítást kell bevetni.
    (az Exit For/Exit Do egyenértékű a Break Pascal vagy C/CPP utasítással, az Exit For kilép a For ciklusból, míg az Exit Do, a Do-Loop ciklust szakítja meg.)

    Példaprogi

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    j = 0
    For i = 1 To ThisWorkbook.Worksheets.Count
    If ThisWorkbook.Worksheets(i).Name = "Munka5" Then GoTo label001
    j = j + 1
    label001:
    Next
    MsgBox (j)
    End Sub

    Fire.

  • Cuci3

    tag

    Annyira iszonyítos a hallgatás, hogy meg kell szakítanom egy kérdéssel:
    Van egy ciklusom, ami végiglépked az összes munkalapon. A cikluson belül van egy elágazásom, ami megvizsgálja a munkalap nevét. Ha a munkalap neve Ellenőrzés, akkor a következő lapra kellene ugrani. Kérdés, hogy oldom ezt meg. Van-e olyan sor, ami a következő For-ba ugrasztja a progit - lentebb a program részlete. Goto-ra én is gondoltam, de az mégsem lenne annyira jó.

    For Each lap In Workbooks(valtozo).Worksheets
    If lap.Name = el Then
    Ide kellene valami next lap, vagy ilyesmi.
    Else
    End If
    Next

  • gsc73

    aktív tag

    válasz Delila_1 #5782 üzenetére

    Sziasztok!

    Közeledünk a tökéleteshez….:)

    Az elválasztó karakter problémaköréből adódó nehézségeket sikerült megoldanom.

    Detektálásért köszönet Delila_1 –nek………… :R :R :R (On Error Goto….)
    Szétválasztásért köszönet Cuci3-nak………… :R :R :R (Adatok/Szövegből oszlopok)
    Makró rögzítés. Kis alakítás, és működik is, örül, boldog………

    Egy kicsit más kérdés (ez már csak olyan szépítés):
    A mostani personal.xlsb modul szerkezete az alábbiak szerint néz ki:

    Sub egyes_verzio()
    'valami 1
    kozos
    End Sub
    Sub kettes_verzio()
    'valami 2
    kozos
    End Sub
    Sub kozos()
    'közös dolgok
    End Sub

    Mivel a közös rész a legnagyobb (90%-a az egésznek), így logikusnak tűnt, hogy szubrutinszerűen meghívogatom, ami sok-sok egyéb előnnyel is jár. Ebben az esetben a futtatható makrók listájában 3 sor jelenik meg: egyes_verzio/kettes_verzio/kozos. Természetesen a kozos rész nem működik helyesen önmagában. El lehet azt rejteni valahogy? (hide)

    Üdv: g.

  • Delila_1

    veterán

    válasz gsc73 #5775 üzenetére

    Sub PontosVessző_e()
    On Error GoTo Hiba
    If Application.Search(";", Cells(1)) > 0 Then MsgBox "Pontosvesszők az elválasztók"
    Exit Sub
    Hiba:
    MsgBox "Nem pontosvesszők az elválasztók"
    End Sub

  • Delila_1

    veterán

    válasz Lamair #5325 üzenetére

    Más módszerrel:

    Sub Keres_1()
    v% = InputBox("Kérem a keresendő értéket", "Keresés")
    On Error GoTo Hiba
    Cells.Find(What:=v%, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
    xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False).Activate
    sor = Selection.Row
    Rows(sor).Select
    Exit Sub
    Hiba:
    MsgBox "Nincs ilyen érték"
    End Sub

  • Delila_1

    veterán

    válasz Fehér Mancs #4674 üzenetére

    Nagyon jó.

    Tegyük hozzá, hogy ha a TermIrány 0, akkor a tartomány jobb oldalától és lentről- , 1 értéknél pedig tartomány bal oldalától és fentről keresi az első, értéket tartalmazó cellát.

    Egy pici szépítés:
    Az
    ElsőNemÜres = CVErr(xlErrNA) sor helyett a
    On Error GoTo 0: ElsőNemÜres = ""
    sor nem a csúf #HIÁNYZIK értéket adja vissza, hanem üres string lesz a függvényt tartalmazó cella kimenete.

  • VANESSZA1

    őstag

    válasz Delila_1 #4617 üzenetére

    Rájöttem, talán az a gond,hogy közben módosítottam a táblázatot. Cellákat szúrtam be.
    Az emailben amit küldtél tökéletesen működik, csak azt a táblát tovább fejlesztettem..

    Akkor most helyesen így nézne ki a makró?
    Sub rejt()
    Dim lap As Variant
    lap = Array("Kaschieren", "Näherei")
    For ll = 0 To 1
    Sheets(lap(ll)).Select
    For sor = Range("G65536").End(xlUp).Row To 11 Step -1
    If Cells(sor, 7) = "" Then GoTo Köv
    If Cells(sor, 7) = 0 Then
    Range("G" & sor).Select
    Selection.EntireRow.Hidden = True
    End If
    Köv:
    Next
    Next
    End Sub

    Sub felfed()
    Dim lap As Variant
    lap = Array("Kaschieren", "Näherei")
    For L = 0 To 1
    Sheets(lap(L)).Select
    Rows("11:100").Select
    Selection.EntireRow.Hidden = False
    Range("C1" & sor).Select
    Next
    End Sub

    A G oszlop 11-es sorától kellene elrejteni, vagy felfedni.

    Helyesen módosítottam?
    Vagy a felfeden még kell alakítani?

  • Delila_1

    veterán

    válasz Lehdog #4596 üzenetére

    Két lapról van szó, ahol az adatok a 11. sorban kezdődnek, és az itt-ott 0-t tartalmazó oszlop a G.

    Sub rejt()
    Dim lap As Variant
    lap = Array("Kaschieren", "Näherei")
    For laap = 0 To 1
    Sheets(lap(laap)).Select
    For sor = Range("G65536").End(xlUp).Row To 11 Step -1
    If Cells(sor, 7) = "" Then GoTo Köv
    If Cells(sor, 7) = 0 Then
    Range("G" & sor).Select
    Selection.EntireRow.Hidden = True
    End If
    Köv:
    Next
    Next
    End Sub

    A range("G" & sor).select helyett először rows(sor & ":" & sor).select-et írtam. Akkor az volt a baj, hogy az egyik oszlopban lévő összevonások (merge) miatt több sort jelölt-, és rejtett el.

  • Fire/SOUL/CD

    félisten

    válasz Oly #4091 üzenetére

    Hali!

    Na így már tiszta, mit is szerettél volna elérni. :DDD

    Munkafüzet1 - Munka1 (Code)

    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo errorhandling
    xstr = LCase(Range("B2"))
    Pos = InStr(1, xstr, ".jpg", vbTextCompare)
    If (Pos > 0) Then
    Image1.PictureSizeMode = fmPictureSizeModeStretch
    Image1.Picture = LoadPicture(xstr)
    End If
    Exit Sub

    errorhandling: MsgBox ("FileOpen ERROR!")

    End Sub

    Na, asszem ez lesz az :DDD
    Ha nem a B2-ben lesz az adat akkor egyszerűen módosítsd a makróban, egy helyen kell.

    Fire.

  • Fire/SOUL/CD

    félisten

    válasz Oly #4087 üzenetére

    Hali!

    Persze, de bent is van a kódban. Ha rálépsz az adott cellára, amiben a kép elérése van akkor egyből betölti(már ha valóban létező képről van szó). Próbáld ki. A gombos megoldást csak érdekességnek szántam. Ha nem kell akkor töröld ki a makróból a commandbutton1_Click() metódust, meg persze töröld a gombot is.
    Pár módosítást eszközöltem, mert a korábbi verzió mindig megpróbál betölteni egy képet, ha az adott cella nem üres. Ez zavaró lehet hiszen ha egy cellában szám vagy szöveg van és az nem egy kép elérési útvonala, akkor hibát dob. Ez a javított kód.

    Private Sub CommandButton1_Click()
    JPGFile = Application.GetOpenFilename("JPG files,*.jpg", , "Select picture...", , False)
    If JPGFile <> False Then
    Range("B2") = JPGFile
    Image1.PictureSizeMode = fmPictureSizeModeStretch
    Image1.Picture = LoadPicture(JPGFile)
    End If
    End Sub


    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error GoTo errorhandling
    xstr = LCase(Target)
    Pos = InStr(1, xstr, ".jpg", vbTextCompare)
    If (Target.Cells.Count = 1) And (Pos > 0) Then
    Range("B2") = Target
    Image1.PictureSizeMode = fmPictureSizeModeStretch
    Image1.Picture = LoadPicture(Target)
    End If
    Exit Sub
    errorhandling: MsgBox ("Multi Cells Selection found or FileOpen ERROR!")
    End Sub

    Fire.

  • Fire/SOUL/CD

    félisten

    válasz Oly #4084 üzenetére

    Hali!

    Nos, a kért megoldáson kívűl még egy más módszert is beleraktam, érdekességként. A képet azért mellékeltem, nehogy más objektumot használj, hanem sima Image-t.

    Munkafüzet1 - Munka1(Code)

    Private Sub CommandButton1_Click()
    JPGFile = Application.GetOpenFilename("JPG files,*.jpg", , "Select picture...", , False)
    If JPGFile <> False Then
    Range("B2") = JPGFile
    Image1.PictureSizeMode = fmPictureSizeModeStretch
    Image1.Picture = LoadPicture(JPGFile)
    End If
    End Sub


    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error GoTo errorhandling
    If (Target.Cells.Count = 1) And Target <> "" Then
    Range("B2") = Target
    Image1.PictureSizeMode = fmPictureSizeModeStretch
    Image1.Picture = LoadPicture(Target)
    End If
    Exit Sub
    errorhandling: MsgBox ("Multi Cells Selection found or FileOpen ERROR!")
    End Sub

    Fire.

  • Balinov

    titán

    Sziaszto, Excel 2007 (angol) eseten futottam bele egy erdekes, am annal idegesitobb problemaban.

    Dolgozok napi szinten egy cirka 2500 sorbol allo ill. AN oszlopig kiterjedo Oraclebol exportalt excel tablaval. formazas semmi kulonos, egy auto filter van az oszlopnevekhez, meg a fejadatok vannak szinnel kiemelve. A gondom az, hogy pl. egy vevore leszukitem a forrast (legyen a neve A), kijelolom oszlopcimmel egyutt es egy Crtl+N-t bokve uj fileba akarnam copy-paste-vel beilleszteni. Na ilyet rendkivul gyakran kell csinalni. Nem regota raktak fel a cegnel az Office 2003 helyett a 2007-et. Nagyon sokaig mukodott is, am egyszercsak azt kezdte el csinalni, hogy Crtl+V utan az uj munkafuzetben csak a kijeloles merete (x*y oszlop es sor) latszik, de a forras munkafuzet cellainak az erteke nem kerul at az ujba.

    Igy csinalom: Szurovel kivalasztom XYZ vevot. Kijelolom az adatokat (pl. A1-tol X16ig) egerrel. Crtl+C masol. Uj munkafuzet megnyit, goto A1 cella. Crtl+V beilleszt.

    Rohadjon meg, most hogy irom a postot ujbol megprobalom. Ha az oszlopcimes sort (C sor) kijelom, kopipeszt megy. Ha filter nelkul kijelolok kb. 50 sort oszlopfejlecestol, megy. Ha raszurok xzy vevore, kijelolom, kopipeszt uj munkafuzetbe, nem megy. Hat :W :W Ilyet nem ertem. Mi lehet a gond?

    1db makro van csak, de az is csak a formazast csinalja meg nekem, hogy kb 1 kepernyo szelessegben a legfontosabb adatokat tartalmazo oszlopok latszodjanak.

    Valakinek tippe, otlete?

    Koszi
    Balinov

  • Delila_1

    veterán

    válasz picsu #2870 üzenetére

    Mondták, igaz, akkor istennőt mondtak. Köszönöm. Itt a javított kiadás hibakezeléssel.

    Sub Adatok()
    utvonal = "E:\Eadat\"
    sor = 2
    Do While Cells(sor, 1) <> ""
    fnev = Cells(sor, 1) & ".xls"
    funev = utvonal & Cells(sor, 1)
    On Error GoTo hiba
    Workbooks.Open Filename:=funev
    If tal = 0 Then
    ActiveWindow.ActivatePrevious
    Cells(sor, 2).Select
    ActiveCell.Formula = "=INDIRECT(""[" & fnev & "]Munka1!B3"")"
    Cells(sor, 3).Select
    ActiveCell.Formula = "=INDIRECT(""[" & fnev & "]Munka1!C6"")"
    Cells(sor, 4).Select
    ActiveCell.Formula = "=SUM(INDIRECT(""[" & fnev & "]Munka1!E1:E7""))"
    Range(Cells(sor, 2), Cells(sor, 4)).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
    Application.CutCopyMode = False
    ActiveWindow.ActivateNext
    ActiveWindow.Close
    Else
    Cells(sor, 2) = "Nem létező file"
    End If
    tal = 0
    sor = sor + 1
    Loop
    Exit Sub

    hiba:
    Err = 0
    tal = 1
    Resume Next

    End Sub

  • matekmatika

    tag

    válasz ssrobi #2097 üzenetére

    Persze a követkaző formula kicsit elegánsabb. Nem csak azért, mert van benne egy hibakezelés is arra az esetre, ha nem lenne nyitva a másolandó adatokat tartalmazó munkafüzet, hanem mert csak :D

    Sub akarmi()
    On Error GoTo ErrorHandler
    Workbooks(''munkafüzet1.xls'').Activate
    Columns(''A:A'').Select
    Selection.Copy
    Workbooks(''munkafüzet2.xls'').Activate
    Cells(1, 1).Select
    ActiveSheet.Paste
    Exit Sub
    ErrorHandler:
    Workbooks.Open Filename:=''munkafüzet1.xls''
    End Sub

Új hozzászólás Aktív témák

Hirdetés