22. juni 2007 - 17:30Der er
12 kommentarer og 1 løsning
aktivering af celle i en anden workbook
Jeg vil lige spørge om alle de kloge hoveder er gået på ferie eller om jeg gør noget forkert på dette medie da jeg på nuværende tidspunkt har to spørgsmål som ikke har fået nogen svar på.
i stedet har jeg knoglet på at løse opgaven (er meget ny i programereing. Det jeg ønsker er: Ved aktivering af en knap i en workbook (nummer) at komme til en anden workbook, uden at denne åbnes finde den sidste celle i række b , hvorefter der flyttes til række a og en celle ned. Her skrives så tallet fra cellen ovenover i række a + 1. dette tal sendes så retur til workbook (nummer) Begge workbooks ligger i samme biblotek. her er mit forsøg: den første del virker og jeg får Nummer åbnet det er for at jeg kan se hvad der sker meningen er at den ikke skal åbnes men hvis den er åbnet er det ok. del to kan jeg også få til at virke men den vælger kun b2 selv om der er skrevet noget i cellen, herefter kommer der fejl
jeg mangler så det sidste med et nummer som bliver sendt retur til en celle
Private Sub strtilbudsnummer_Click() Private Sub strHome_Click() Dim wb As Workbook Dim wbOpen As Boolean Dim wbFilename As String
wbOpen = False wbFilename = "tilbudsnummer.xls"
For Each wb In Application.Workbooks If wb.Name = wbFilename Then wbOpen = True wb.Activate End If Next If wbOpen = False Then Workbooks.Open Filename:=ThisWorkbook.Path & "\ tilbudsnummer.xls ", ReadOnly:=True Application.Windows.Arrange xlArrangeStyleCascade End If
'del 2
If Range("b2").Value = "" Then Range("a2").Select Else lastrow = Cells(Rows.Count, ActiveSheet, "b").End(xlUp).Row Range("b" & lastrow + 1).Select End If 'End If With ActiveCell
Public Sub GetNumber() Dim objOpenWB As Workbook Dim objWB As Workbook Dim objWS As Worksheet Dim strFilename As String Dim objBRange As Range Dim lngNumber As Long Dim lngNewNumber As Long
strFilename = "tilbudsnummer.xls"
For Each objOpenWB In Application.Workbooks If objOpenWB.Name = strFilename Then Set objWB = objOpenWB Exit For End If Next
If objWB Is Nothing Then Set objWB = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & strFilename) End If
Set objWS = objWB.Sheets(1) Set objBRange = objWS.Columns(2).SpecialCells(xlLastCell)
Set objWB = Nothing Set objWS = Nothing Set objBRange = Nothing End Sub ********************
Du har nu nummeret i lngNewNumber, hvis du skal bruge det i din "startfil".
Jeg kunne ikke lige gennemskue, hvorfor du ville i celle B2, hvis den er tom. Skal du ikke "bare" i den sidste celle i kolonne B? Det er i hvertfald, hvad jeg er gået ud fra. Ellers må du forklare nærmere.
Obs! I din kode åbner du tilbudsnummerfilen som read only, men da jeg går ud fra, at du gerne vil kunne gemme det nye nummer i filen, åbner min kode IKKE filen som read only.
tak for det grunden til at jeg vil anvende kolonne b er at der når der bliver aktiveret et tilbudsnummer skal der komme en del oplysninger navn adresse ol fra tilbudssuden som har aktiveringsknappen. Det med read only er fordi jeg har glemt at slette det da jeg kopierede det over til ekspert. Det jeg gerne vil er at tilbudsnummerfilen ikke bliver åbnet og samtidig når der denne procedure er kørt igennem bliver siden gemt automatisk eks der står aet navn i cellerne b2-b4 så vil der også være tilbudsnumre i a2-a4derfor skal nyt nummer være i a5 hvis der ikke kommer information fra tilbudet til b5 vil dette nummer også blive brugt næste gang. Jeg håber det vil kunne lade sig gøre
Du kan ikke trække data ud fra en Excel-fil uden at åbne den (med mindre du bruger Excel 2007 og så skal vi til at rode i de xml-filer, som ligger bag det nye filformat) - og du skal jo også gemme det nye nummer i filen (går jeg ud fra).
Hvis du vil tilføje en Gem til ovenstående, kan det gøres til sidst i ovennævnte procedure:
objWB.Save
Har du prøvet ovennævnte procedure af? Jeg forstår ikke helt din yderligere information, så prøv ovennævnte af, og hvis du ikke får det ud af det, som du gerne vil, må du melde tilbage.
Det var moske bedre at generere tælleværket i tilbudssystemet og så sende det med over i tilbudsnummer (det skulle gerne blive til en tilbudsjournal )som skal opsamle data hver gang der bliver givet et tilbud. grunden til at jeg laver en knapfunktion er at man godt kan lave beregninger uden at afgive et tilbud disse skal ikke samles op da det er unødvendig. Det du sendte fungerer fint det ville bare være godt hvis jeg kunne gemme data i baggrunden dog hvis siden er åbnet skal den selvfølgelig stadig samle data op. Jeg har været inde på dette spørgsmål før men har ikke fået svar så kan du hjælpe mig er der rigeligt point eller hvad der nu skal til
Med hensyn til at wb åbner er jo ingen problem for vi kan jo bare afslutte med at den gemmer og lukker så fungere det. Den du har sendt mig fungere som tidliger sagt fint bortset fra at hver gang jeg trykker på knappen laver den et nyt nummer og det skal den kun hvis der står noget i cellen ovenover i kolonne b står der ikke noget i den skal den blive ved det nummer som blev genereret sidst
Ang. din kommentar 13:36:29 om, at der er rigeligt point, men at du ikke har fået svar. Det handler for mig absolut ikke om point, men derimod om, at jeg har svært ved at gennemskue, hvad det er, du spørger om.
Hvis siden er åbnet... hvilken side? Gemme data i baggrunden ... hvilke data? Hvis det er det nye nummer, så eksisterer det i lngNewNumber, som jeg også har skrevet i kommentaren med proceduren. Hvis du så skal bruge nummeret andetsteds, kan du trække det derfra. Det nye nummer er sat ind i Excel-filen, så hvis du vil beholde nummeret der, skal du blot gemme Excel-filen (har jeg i øvrigt også skrevet, hvordan du gør).
Hvad mener du med, at den kun skal generere et nyt nummer, hvis der står noget i cellen ovenover i kolonne b? Cellen ovenover - ovenover hvad?
Hvis du forestiller dig at der er to excel filer (workbooks) den ene er et tilbudssystem og den anden er tilbudsjournal. Når jeg i tilbudssystemet aktiverer en knap (nyt tilbudsnummer) skal den gå over i Journalen og generere et nyt nummer samtidig indsætte en række data i cellerne i den række hvor det nye nummer er genereret ( navn adress pris m.m.. EKS. nyt nummer generers i celle A6 så skal data fra forskellige celler i tilbudssystemet førers over i række 6 men hvis brugeren ikke har indsat navn i tilbudssystemet skal der ikke overføres data og det generede tilbusnummer skal så anvendes næste gang derfor hvis der ikke i står et navn i b5 skal der ikke komme et nyt nummer i A7. Jeg siger tak for din tolmodighed nu håber jeg at jeg har fået forklaret mig ordentlig. i øvrigt har jeg fået send nyt nummer tilbage til tilbudssystemet ved at anvende sPage men hvordan får jeg sPage indsat i den valgte celle. Grunden til at jeg i det første bruger nummer og tilbudsnummer er at jeg har oprette et testprogram og vil have det til at kører inden det kommer over i tilbudssystemet.
jeg vil lige sige at jeg har fået tilbudsnummeret tilbage til den første excel fil du får lige en kopi at det jeg er kommet frem til Private Sub strtilbudsnummer_Click() Dim objOpenWB As Workbook Dim objWB As Workbook Dim objWS As Worksheet Dim strFilename As String Dim objBRange As Range Dim lngNumber As Long Dim lngNewNumber As Long Dim strGA As String Dim sPage As String
strFilename = "tilbudsnummer.xls"
For Each objOpenWB In Application.Workbooks If objOpenWB.Name = strFilename Then Set objWB = objOpenWB Exit For End If Next
If objWB Is Nothing Then Set objWB = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & strFilename) End If
Set objWS = objWB.Sheets(1) Set objBRange = objWS.Columns(2).SpecialCells(xlLastCell)
Set objWB = Nothing Set objWS = Nothing Set objBRange = Nothing
strGA = "nummer.xls" For Each objOpenWB In Application.Workbooks If objOpenWB.Name = strGA Then Set objWB = objOpenWB Exit For End If Next
If objWB Is Nothing Then Set objWB = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & strGA) End If Sheets("ark1").Range("a2").Select Selection = (sPage)
jeg håber ikke det er belastende men jeg har lige et mere enkelt foreslag: Private Sub strtilbudsnummer_Click() Dim objOpenWB As Workbook Dim objWB As Workbook Dim objWS As Worksheet Dim strFilename As String Dim objBRange As Range Dim lngNumber As Long Dim lngNewNumber As Long Dim sPage As String
strFilename = "tilbudsnummer.xls"
For Each objOpenWB In Application.Workbooks If objOpenWB.Name = strFilename Then Set objWB = objOpenWB Exit For End If Next
If objWB Is Nothing Then Set objWB = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & strFilename) End If
Set objWS = objWB.Sheets(1) Set objBRange = objWS.Columns(2).SpecialCells(xlLastCell)
Nu går jeg så bare over til at kommentere dit seneste forslag.
Hvorfor laver du en string, som du sætter lig med lngNewNumber? Det er der ingen grund til. Medmindre du gerne vil have, at din markør står i A2 i det oprindelige ark, er der heller ingen grund til at selecte cellen. Brug i stedet:
Sheets("tariff").range("A2").value = lngNewNumber
Du kan i øvrigt også slå objWB.Save og objWB.Close sammen til:
Jeg tillader mig at gå ud fra, at det er mig, du vil tildele point. I så fald kan du først gøre det, når jeg har lagt det svar (det er så det her). Der skulle så være en firkantet boks, som du kan klikke i og tildele point.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.