• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

subscript

Status
Niet open voor verdere reacties.

Symphysodon

Gebruiker
Lid geworden
14 dec 2012
Berichten
468
Beste forummers,

In een programmatje wil ik van diverse tabbladen waar tabellen in staan, van dezelfde grootte en met dezelfde onderlinge afstand van elkaar, van de eerste cel de subscript instellen van een gedeelte van die cel. Ik dacht dat zo te doen:
Code:
Sub subTest()
sR = 5
For ox = 1 To 27
    xC = Cells(sR, 31)
    lt = Right(xC, Len(xC) - 11)
    s = Left(lt, Len(lt) - 2)
    
    For j = 2 To Len(s)
        If s.Characters(j, 1).Text Like "[1-9]" And Mid(s, j - 1, 1) <> " " Then s.Characters(j, 1).Font.Subscript = True
    Next
    sR = sR + 34
Next

Tot aan het toekennen van de s gaat het goed, het gedeelte van de cel wat bekeken moet worden is bepaald.
Ik krijg alleen een foutmelding: object vereist. Ik heb al van alles geprobeerd, maar krijg het niet voorelkaar.

Mvg
Marco
 
s is natuurlijk ook geen object maar een stukje tekst.
Tevens heb je geen voorbeeld documentje geplaatst.
 
Zo:
Code:
Sub subTestForum()
    Dim xC As Range
    sR = 5

    For ox = 1 To 27
        Set xC = Cells(sR, 31)
        If xC = "" Then Exit For
        lt = Right(xC, Len(xC) - 11)
        s = Left(lt, Len(lt) - 2)
        
        For j = 2 To Len(s)
            If xC.Characters(j, 1).Text Like "[1-9]" And Mid(s, j - 1, 1) <> " " Then xC.Characters(j, 1).Font.Subscript = True
        Next
        sR = sR + 34
    Next
End Sub
 
In een voorbeeldbestand geef je ook de verwachte uitkomst aan. Gebruik geen samengevoegde cellen. Om bij de juiste cel uit te komen kan je ook zoiets gebruiken:

Code:
Sub VenA()
  For Each ar In Columns(31).SpecialCells(2).Areas
    MsgBox ar.Cells(1).Address
  Next ar
End Sub
 
Ik dacht meer aan dit.

Code:
Sub subTestForum()
Dim xC As Range, sR As Long, ox As Long, s As Long, j As Long
sR = 5


 For ox = 1 To 27
   Set xC = Cells(sR, 31)
    If xC = "" Then Exit For
      s = InStr(xC, ":") + 2
       For j = s To Len(xC) - 2
        If xC.Characters(j, 1).Text Like "[1-9]" And Mid(xC, j - 1, 1) <> " " Then xC.Characters(j, 1).Font.Subscript = True
       Next
    sR = sR + 34
 Next
End Sub

En dan kan je het nog in een step 34 zetten.
For ox = 5 to 889 step 34 '26*34+5=889
Set xC = Cells(ox, 31)
 
@Edmoor
Ik snap wat je bedoelt maar het gaat juist om het stukje tekst van s en niet van xC.

@VenA
De uitkomst is het resultaat van de code van HSV.

@HSV
Als ik het goed begrijp wordt er gekeken vanaf substringpositie 12 tot 2 posities voor het einde en dat is precies de bedoeling: alles voor de dubbele punt moet genegeerd worden en zo ook de type aanduidingen (laatste 2posities) aan het eind.

Het was weer een leerzaam topic. Bedankt allemaal

grt
Marco
 
@Edmoor
Ik snap wat je bedoelt maar het gaat juist om het stukje tekst van s en niet van xC.

En die s is dus een string en niet een object.
Dat object moet worden aangemaakt en dat doe ik in dat voorbeeld met de Set opdracht.
xC bevat alle informatie die je nodig hebt en deed ik om niet teveel aan je eigen code te wijzigen.
 
ja dat snap ik alleen het gaat juist om de informatie die in s staat en niet in het object xC en met instr is dat prachtig opgelost.
 
Of

Code:
Sub M_snb()
  sn = Blad1.UsedRange.Columns(31)
 
  For j = 5 To UBound(sn) Step 34
    st = Split(sn(j, 1))
    If UBound(st) = 4 Then
      y = InStr(sn(j, 1), st(3)) - 1
      For jj = 1 To Len(st(3))
        If Val(Mid(st(3), jj, 1)) > 0 Then Cells(j, 31).Characters(y + jj, 1).Font.Subscript = True
      Next
    End If
  Next
End Sub
 
Ik denk niet dat je helemaal begrijpt wat dat xC object inhoudt, maar goed, je hebt je oplossing.
 
Bij jou code wordt er toch in het object xC gekeken vanaf de eerste letter en dat is juist niet de bedoeling
 
Mij ging het om de foutmeldigng die je kreeg.
Dat gebeurt op dit: s.Characters(j, 1).Text

Zoals ik al zei is s daar geen object maar een stukje tekst en daarom kreeg je die foutmelding.
Dat was je initiële vraag waar ik antwoord op gaf.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan