bestaat .offset in vb?

Status
Niet open voor verdere reacties.

Spiesse

Gebruiker
Lid geworden
14 jul 2011
Berichten
902
perfecte omschrijving in mijn titel vind ik :)

ik weet dat in vba .offset een leuk en veelgebruikt regeltje is. maar bestaat deze ook in visual basic?

Hieronder heb ik een stukje code dat gegevens wegschrijft naar een excelfile. Nu ben ik aan het zoeken om na het wegschrijven de betreffende regels onder de ingevoerde tekst te selecteren om zo de nieuwe gegevens te kunnen bijschrijven...

Code:
Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object

        'Start a new workbook in Excel.
        oExcel = CreateObject("Excel.Application")
        oBook = oExcel.Workbooks.Add

        'Add data to cells of the first worksheet in the new workbook.
        oSheet = oBook.Worksheets(1)
        oSheet.Range("A1").Value = "Last Name"
        oSheet.Range("B1").Value = "First Name"
        oSheet.Range("A1:B1").Font.Bold = True
        oSheet.Range("A2").Value = LastName.Text
        oSheet.Range("B2").Value = FirstName.Text

        'Save the Workbook and quit Excel.
        oBook.SaveAs("h:\Book1.xls")
        oSheet = Nothing
        oBook = Nothing
        oExcel.Quit()
        oExcel = Nothing
        GC.Collect()
    End Sub
End Class
 
Zover ik weet bestaat .Offset gewoon. In ieder geval voor activecell. Maar zoals ik ook al aangaf in het andere topic bestaat het risico dat je dus teveel "excel" denkt en dus excel dingen in VBA gaat doen in plaats van VB werken.

Als je wil oefenen met databases en eventueel SQL kun je excel beter aanroepen via de database interface. Dan kun je gewoon via SQL insert een regel invoegen en je verder niet druk maken hoe de database weet wat de volgende lege regel is.

*edit* zie ook mijn reply nog in het vorige topic
 
het is een feit dat ik een excellerke ben :)

wie weet heb jij nergens in je archieven een registratieformulier zitten in vb? :)
 
Ik heb een dataset analyser in C#. Maar die code heb ik al bijna 10 jaar niet meer aangeraakt. Het spit door potentieel duizenden excel (template) files en haalt er pertinente informatie uit die wordt opgeslagen in een nieuwe excel file, inclusief een hyperlink naar de originele file.

Vervolgens kunnen er queries losgelaten worden op die cumulatieve excel file en de relevante gevonden files opgevraagd worden of verder ge-exporteerd worden naar een kleine dataset.

Grotendeels kan bovenstaande ook met excel. C#(en VB.net natuurlijk) heeft echter betere ondersteuning voor het recursief doorlopen van directory structuren, netwerk-opslag en kan gecontroleerd uitgevoerd worden op het niveau van een admin, waar dat moeilijker is met excel. Bovendien kunnen de queries gecontroleerd en veilig uitvoeren op excel informatie zonder kans op corruptie van de masterfile. Dat is de belangrijkste drijfveer geweest om toen C# automation te gebruiken in plaats van native VBA.

De snelheid is echter meer dan prima te noemen. Bij het bouwen van de mastersheet kun je 200 (geneste) directories doorlopen en daar 500 excel files in openen en doorzoeken in een kleine 10 seconden (op een lokale schijf / netwerk is gelimiteerd door de netwerksnelheid).

Daar heb je natuurlijk allemaal niets aan, maar geeft misschien beter weer wanneer je kiest voor welk systeem en welke oplossing
 
wampier,

in bijlage het excelbestand met userform dat ik reeds ontworpen heb. Mss kan je dit eens bekijken en je mening hierrond formuleren.

Het is dit wat ik in vb zou willen 'namaken'
 
En wil je nou alleen excel automatiseren of wil je een generieke oplossing maken?

Een formuliertje overtypen is nu eenmaal niet echt de uitdaging neem ik aan? :)
 
wat bedoel jij met een generieke oplossing? :)

wat ik wil is in principe dus dit:
van het excelbestand een .exe maken in vb dat de gegevens wegschrijft in een excellijst zonder enige mogelijkheid van verlies van gegevens (als 2 personen tegelijk iets willen opslaan in het gedeeld geopend bestand wat nu gebruikt wordt).

het formulier overtypen is niet de uitdaging :) wel de code genereren in vb om hetzeflde te bekomen van het formulier in excel :)
 
Een generieke oplossing werkt met elke database, een specifieke oplossing werkt alleen in excel.

Let wel, het verlies van gegevens wordt gedeeltelijk bewaakt door windows zelf. In principe is het gebruik van excel OF een eigen programma daar verder geen oplossing voor! Dit is dus gedeeltelijk van windows afhankelijk. Voordeel is wel dat de file pas open hoeft als je op "submit" drukt.

Grappige is wel (net getest) dat je met database queries iemands excel file kunt updaten terwijl die erin werkt (zolang er op dat moment geen cel ge-edit wordt) Als iemand een formulier open heeft wordt de file netjes aangepast. Dat werkt dus allemaal wel aardig. Enige is dat de volgorde niet 100% gegarandeerd is, maar 2 mensen zouden dus zonder problemen submits kunnen doen.
 
bestand wordt idd maar geopend na op opslaan te klikken, en sluit zich dan terug. Dus jij zou niet afstappen van het excel-formulier uit vrees dat 2 personen op dezelfde regel willen 'schrijven'?
 
Nee dat is niet de reden. Zoals ik al eerder aangaf in mijn andere post is dat ervoor dat specifieke probleem er betere oplossingen bestaan (zie andere topic). Ik heb ook in mijn posts steeds gezegd dat deze manier van werken leerzaam is, maar niets fundamenteels toevoegt aan de VBA oplossing.

Wat ik hierboven beschrijf is dat als 2 mensen tegelijk updaten het risico bestaat dat ze beide "event 10" uploaden en je dus 2 x event 10 in je database krijgt. Het updaten an sich lukt prima, tenzij het echt exact op dezelfde tijd wordt uitgevoerd.

Voegt een VB oplossing in dit geval echt iets toe aan een wezenlijk probleem? nee, want het kan in VBA met betere oplossingen. Is het leerzaam voor de toekomst? jazeker, maar dan zou ik gaan voor een algemene database aanpak, die zich eventueel later vertaald naar access, etc en niet het automatiseren van excel, wat in de basis EXACT hetzelfde is als VBA. In principe is er niets in VB wat niet kan in VBA, behalve waar de beperkingen van de VBA taal de barrière vormen.

Overigens kan ik je wel de code geven die ik nu gemaakt hebt om wat te testen natuurlijk. Het kunnen uitvoeren van SQL op een excel file is altijd grappig.
 
het gegeven dat er 2 maal event 10 geüpload wordt is nog niet zo erg :) het zou erger zijn moest op identiek dezelfde moment iets beschreven worden. Het bestand is ook wel zo opgemaakt dat excel me hiervan op de hoogte brengt.

wat doe ik dan beter? De userform in een leeg excel-file maken, en bij opslaan het te beschrijven bestand openen en direct weer saven en sluiten?
 
Uit het andere topic:

Qua excel kan je een tijdelijk bestand wegschrijven zodra iemand de userform opent. Als iemand anders de userform opent op een andere instantie en de tijdelijke file bestaat geef je een foutmelding. Zodra iemand klaar is met invoeren van een incident delete je het tijdelijke bestand weer. Hetzelfde kan met een beacon / registry setting / virtual pipe en enig welke andere oplossing die je op globaal niveau een setting aan kan laten maken.

Het gebruiken van 2 bestanden kan ook, in samenwerking met bovenstaande dingen. Echter hoop ik dat er nooit 2 ongelukken tegelijkertijd gebeuren die beide invoer behoeven door 2 verschillende personen :)
 
ik hoop het laatste met je mee :)

je quote interesseert me wel, maar weet niet goed hier aan te beginnen...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan