Avatar billede ingeman Seniormester
31. december 2006 - 14:50 Der er 5 kommentarer og
1 løsning

Hvordan får man en celle som er 90% den anden 10 %

den her pliter en celle i 2 - men jeg mangler at de 2 nye er henholdsvis 90 % og 10 % width 

Selection.Cells.Split NumRows:=1, NumColumns:=2, MergeBeforeSplit:=True
                   
                   
                   
                    Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
                    Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
                                                   
                    Selection.Font.Bold = wdToggle
                    Selection.Font.Size = 8
                    Selection.Font.Color = wdColorBlue
       
                   
                    WordBasic.Insert ""
       
                   
                    WordBasic.WordRight 1
                   
                 
                                     
                             
                                     
                    Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
                    Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
                    Selection.Font.Color = wdColorBlack
                    WordBasic.Insert Str(WEEKNR(Str(datosn)))
Avatar billede learningvba Nybegynder
02. januar 2007 - 10:37 #1
Er det dette du tænker på?

Public Sub MakeTabel_SplitCell()
  Dim OrigWidth As Long
  ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=4, NumColumns:=2, AutoFitBehavior:=False
  With ActiveDocument.Tables(ActiveDocument.Tables.Count)
      With .Cell(2, 2)
        OrigWidth = .Width
        .Split NumColumns:=2
      End With
      .Cell(2, 2).Width = OrigWidth * 0.9
      .Cell(2, 3).Width = OrigWidth * 0.1
  End With
End Sub
Avatar billede ingeman Seniormester
02. januar 2007 - 17:52 #2
Her har du hele kode - jeg skal have den til at skrive ugernr om mandagen helt til højre i feltet - i resten af feltet skal jeg kunne skrive som i de andre dage tirsdag til fredag.

Const SØNDAG = 1
Const MANDAG = 2
Const LØRDAG = 7
Const SKÆRTORSDAG = 1
Const LANGFREDAG = 2
Const PÅSKEDAG = 3
Const PÅSKEDAG2 = 4 ' 2. påskedag
Const BEDEDAG = 5
Const KRISTIHIMMELFARTSDAG = 6
Const PINSEDAG = 7
Const PINSEDAG2 = 8 ' 2. pinsedag

Function WEEKNR(InputDate As Long) As Integer
Dim a As Integer, b As Integer, c As Long, d As Integer
    WEEKNR = 0
    If InputDate < 1 Then Exit Function
    a = Weekday(InputDate, vbSunday)
    b = Year(InputDate + ((8 - a) Mod 7) - 3)
    c = DateSerial(b, 1, 1)
    d = (Weekday(c, vbSunday) + 1) Mod 7
    WEEKNR = Int((InputDate - c - 3 + d) / 7) + 1
End Function




Function glrPåskedag(intYear As Integer) As Variant
    ' Udregner påskedag for et givet årstal
    ' Beregningsmetode ifl. Gauss
    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    Dim d As Integer
    Dim e As Integer
    Dim k As Integer
    Dim p As Integer
    Dim q As Integer
    Dim M As Integer
    Dim n As Integer
    Dim intDay As Integer
    Dim intMonth As Integer

    k = intYear \ 100
    p = (13 + 8 * k) \ 25
    q = k \ 4
    M = (15 - p + k - q) Mod 30
    n = (4 + k - q) Mod 7
    'Debug.Print k, p, q, m, n
    a = intYear Mod 19
    b = intYear Mod 4
    c = intYear Mod 7
    d = (19 * a + M) Mod 30
    e = (2 * b + 4 * c + 6 * d + n) Mod 7

    If d + e <= 9 Then
        intDay = 22 + d + e
        intMonth = 3
    ElseIf (d = 29) And (e = 6) Then
        intDay = 19
        intMonth = 4
    ElseIf (d = 28) And (e = 6) And (a > 10) Then
        intDay = 18
        intMonth = 4
    Else
        intDay = d + e - 9
        intMonth = 4
    End If
    glrPåskedag = DateSerial(intYear, intMonth, intDay)
End Function

Function Helligdag(intYear As Integer, Helligdagstype As Integer) As Variant
   
    ' Returnerer datoen for de forskydelige helligdage.
    ' Helligdagstypen angives med en af de prædefinerede konstanter

    Select Case Helligdagstype
        Case SKÆRTORSDAG
            Helligdag = glrPåskedag(intYear) - 3
        Case LANGFREDAG
            Helligdag = glrPåskedag(intYear) - 2
        Case PÅSKEDAG
            Helligdag = glrPåskedag(intYear)
        Case PÅSKEDAG2
            Helligdag = glrPåskedag(intYear) + 1
        Case BEDEDAG
            Helligdag = glrPåskedag(intYear) + 26
        Case KRISTIHIMMELFARTSDAG
            Helligdag = glrPåskedag(intYear) + 39
        Case PINSEDAG
            Helligdag = glrPåskedag(intYear) + 49
        Case PINSEDAG2
            Helligdag = glrPåskedag(intYear) + 50
    End Select
End Function

Function IsHelligdag(dtmDate As Variant) As Integer
    ' Returnerer TRUE hvis dtmDate er en helligdag
    Dim intYear As Integer
    Dim dtmPåskedag As Variant

    intYear = Year(dtmDate)
    dtmPåskedag = glrPåskedag(intYear)

    Select Case dtmDate - dtmPåskedag
        Case -3, -2, 0, 1, 26, 39, 49, 50
            IsHelligdag = True
        Case Else
            If (Month(dtmDate) = 1) And (Day(dtmDate) = 1) Then
                IsHelligdag = True ' Nytårsdag
            ElseIf (Month(dtmDate) = 5) And (Day(dtmDate) = 1) Then
                IsHelligdag = True ' 1 Maj
            ElseIf (Month(dtmDate) = 6) And (Day(dtmDate) = 5) Then
                IsHelligdag = True ' Grundlovsdag
            ElseIf (Month(dtmDate) = 12) And (Day(dtmDate) = 25) Then
                IsHelligdag = True ' Juledag
            ElseIf (Month(dtmDate) = 12) And (Day(dtmDate) = 26) Then
                IsHelligdag = True ' 2. juledag
            End If
    End Select
End Function

Public Sub MakeTabel_SplitCell()
  Dim OrigWidth As Long
  ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=2, AutoFitBehavior:=False
  With ActiveDocument.Tables(ActiveDocument.Tables.Count)
      With .Cell(2, 2)
        OrigWidth = .Width
        .Split NumColumns:=2
      End With
      .Cell(2, 2).Width = OrigWidth * 0.9
      .Cell(2, 3).Width = OrigWidth * 0.1
  End With
End Sub


Public Sub MAIN()
Dim x
Dim errtext$
Dim maaned
Dim aar
Dim teller
Dim dag
Dim datosn

Dim datolr
Dim dmaaned
Dim temp

ReDim dage__$(7)
dage__$(1) = "S ": dage__$(2) = "M ": dage__$(3) = "T "
dage__$(4) = "O ": dage__$(5) = "T "
dage__$(6) = "F ": dage__$(7) = "L "

ReDim mdr__$(12)
mdr__$(1) = "Januar": mdr__$(2) = "Februar": mdr__$(3) = "Marts"
mdr__$(4) = "April": mdr__$(5) = "Maj": mdr__$(6) = "Juni"
mdr__$(7) = "Juli": mdr__$(8) = "August": mdr__$(9) = "September"
mdr__$(10) = "Oktober": mdr__$(11) = "November": mdr__$(12) = "December"

WordBasic.BeginDialog 630, 122, "Opretter kalender"
    WordBasic.TextBox 305, 24, 160, 18, "kalendernavn$"
    WordBasic.Text 10, 28, 213, 13, "Navnet på kalenderen:", "Tekst1"
   
    WordBasic.TextBox 305, 48, 160, 18, "mdnr$"
    WordBasic.Text 10, 52, 213, 13, "Nummeret på den 1. måned:", "Tekst2"
   
    WordBasic.TextBox 305, 72, 160, 18, "aar$"
    WordBasic.Text 10, 76, 268, 13, "Årstallet, hvor den første måned er:", "Tekst3"
   
    WordBasic.TextBox 305, 96, 160, 18, "antal$"
    WordBasic.Text 10, 100, 115, 13, "Antal måneder:", "Tekst4"
   
    WordBasic.OKButton 521, 21, 88, 21
    WordBasic.CancelButton 521, 48, 88, 21
WordBasic.EndDialog

Dim informationer As Object: Set informationer = WordBasic.CurValues.UserDialog

start:
x = WordBasic.Dialog.UserDialog(informationer, 1)
On Error GoTo -1: On Error GoTo slut
If x = 0 Then GoTo slut

'Checker dataene fra dialogboksen
If WordBasic.Val(informationer.mdnr$) < 1 Then
    errtext$ = "Månedsnummer skal være større end 0"
    GoTo fejl
End If
If WordBasic.Val(informationer.mdnr$) > 12 Then
    errtext$ = "Månedsnummer skal være mindre end eller lig 12"
    GoTo fejl
End If
If WordBasic.Val(informationer.aar$) < 1900 Then
    errtext$ = "Makroen kan ikke håndtere årstal før 1900"
    GoTo fejl
End If
If WordBasic.Val(informationer.aar$) > 4000 Then
    errtext$ = "Makroen kan ikke håndtere årstal større end 4000"
    GoTo fejl
End If
If WordBasic.Val(informationer.antal$) < 1 Then
    errtext$ = "Antallet af måneder skal være større end 0"
    GoTo fejl
End If
If WordBasic.Val(informationer.antal$) > 12 Then
    errtext$ = "Makroen kan maksimalt håndtere 12 måneder"
    GoTo fejl
End If




WordBasic.Bold 1
WordBasic.Insert informationer.kalendernavn$

WordBasic.TableInsertTable ConvertFrom:="", NumColumns:=Str(WordBasic.Val(informationer.antal$) * 2), NumRows:="33", InitialColWidth:="Auto", Format:="16", Apply:="1"

maaned = WordBasic.Val(informationer.mdnr$)
aar = WordBasic.Val(informationer.aar$)


For teller = 1 To WordBasic.Val(informationer.antal$)
   
    WordBasic.TableSelectColumn
    WordBasic.TableColumnWidth ColumnWidth:="1,5 cm", RulerStyle:="2"
    WordBasic.CharLeft 1
    WordBasic.CharRight 2, 1
    WordBasic.TableMergeCells
    WordBasic.CharLeft 1
    WordBasic.EditBookmark Name:="her", SortBy:=0, Add:=1
   
    WordBasic.Bold 1
    WordBasic.Insert Str(aar)
    WordBasic.Bold 0
    WordBasic.WordLeft 1
    WordBasic.LineDown 1
    WordBasic.CharRight 2, 1
    WordBasic.TableMergeCells
   
   
    WordBasic.ShadingPattern 6
    WordBasic.Bold 1
    WordBasic.Insert mdr__$(maaned)
   
    WordBasic.Bold 0
    WordBasic.WordLeft 1
    WordBasic.LineDown 1
    dag = 1
    datosn = WordBasic.DateSerial(aar, maaned, dag)
   
   
       
    dmaaned = maaned
    While dmaaned = maaned
       
       
        WordBasic.Insert dage__$(WordBasic.Weekday(datosn))
        WordBasic.FormatTabs Position:="1,1 cm", Align:=2, Leader:=0, Set:=1
        WordBasic.Insert Chr(9)
        WordBasic.Insert Str(WordBasic.Day(datosn))
        WordBasic.BorderRight 0
   
             
        WordBasic.WordRight 1
     
        Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
        Selection.Font.Bold = wdToggle
        Selection.Font.Size = 8
        Selection.Font.Color = wdColorBlue
       
        WordBasic.WordLeft 1
       
        dtmDate = DateSerial(aar, maaned, dag)
           
        If IsHelligdag(DateSerial(aar, maaned, dag)) Then
          WordBasic.ShadingPattern 4
          WordBasic.WordRight 1
         
           
          Selection.Font.Italic = wdToggle
          Selection.Font.Color = wdColorBlack
          Selection.Font.Size = 8
         
          If ((Month(dtmDate) = 5) And (Day(dtmDate) = 1)) Or ((Month(dtmDate) = 6) And (Day(dtmDate) = 5)) Then
            Selection.Font.Size = 8
          Else
            WordBasic.ShadingPattern 4
          End If
         
          Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
          Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
         
         
          Select Case DateSerial(aar, maaned, dag)
                         
            Case Helligdag(CInt(aar), SKÆRTORSDAG)
                Selection.TypeText Text:="Skærtorsdag"
                WordBasic.WordLeft 2
           
            Case Helligdag(CInt(aar), LANGFREDAG)
                Selection.TypeText Text:="Langfredag"
                WordBasic.WordLeft 2
           
            Case Helligdag(CInt(aar), PÅSKEDAG)
                Selection.TypeText Text:="Påskedag"
                WordBasic.WordLeft 2
           
            Case Helligdag(CInt(aar), PÅSKEDAG2)
                Selection.TypeText Text:="2. Påskedag"
                WordBasic.WordLeft 4
                 
            Case Helligdag(CInt(aar), BEDEDAG)
                Selection.TypeText Text:="St.Bededag"
                WordBasic.WordLeft 4
           
            Case Helligdag(CInt(aar), KRISTIHIMMELFARTSDAG)
                Selection.TypeText Text:="Kr.himmelfartsdag"
                WordBasic.WordLeft 4
               
            Case Helligdag(CInt(aar), PINSEDAG)
                Selection.TypeText Text:="Pinsedag"
                WordBasic.WordLeft 2
           
            Case Helligdag(CInt(aar), PINSEDAG2)
                Selection.TypeText Text:="2. Pinsedag"
                WordBasic.WordLeft 4
                   
            Case Else
             
                If (Month(dtmDate) = 1) And (Day(dtmDate) = 1) Then
                  Selection.TypeText Text:="Nytårsdag"
                ElseIf (Month(dtmDate) = 5) And (Day(dtmDate) = 1) Then
                  Selection.TypeText Text:="1. Maj"
                ElseIf (Month(dtmDate) = 6) And (Day(dtmDate) = 5) Then
                  Selection.TypeText Text:="Grundlovsdag"
                ElseIf (Month(dtmDate) = 12) And (Day(dtmDate) = 25) Then
                    Selection.TypeText Text:="Juledag"
                ElseIf (Month(dtmDate) = 12) And (Day(dtmDate) = 26) Then
                    Selection.TypeText Text:="2. Juledag"
                End If
                WordBasic.WordLeft 4
           
           
          End Select
               
        End If
       
       
        Select Case WordBasic.Weekday(datosn)
            Case SØNDAG
                WordBasic.ShadingPattern 4
                WordBasic.CharRight 1
                Selection.Font.Size = 8
               
                WordBasic.ShadingPattern 4
                WordBasic.WordLeft 1
               
            Case MANDAG
                If Not IsHelligdag(DateSerial(aar, maaned, dag)) Then
                 
                    WordBasic.WordRight 1
                   
                    Call MakeTabel_SplitCell
                 
                       
                   
                    WordBasic.WordRight 1
                   
                 
                                     
                             
                                     
                    Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
                  '  Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
                    Selection.Font.Color = wdColorBlack
                    WordBasic.Insert Str(WEEKNR(Str(datosn)))
                 
                    WordBasic.WordLeft 4
                End If
                               
            Case LØRDAG
                WordBasic.ShadingPattern 4
             
            Case Else
           
        End Select
       
       
       
       
        WordBasic.LineDown 1
        datosn = datosn + 1
        dag = dag + 1
        maaned = WordBasic.Month(datosn)
    Wend

    temp = WordBasic.Day(datosn)

    While temp <= 30
        WordBasic.BorderRight 0
        WordBasic.LineDown 1
        temp = temp + 1
    Wend

    WordBasic.EditBookmark Name:="her", SortBy:=0, GoTo:=1
    WordBasic.CenterPara
    WordBasic.LineDown 1
    WordBasic.CenterPara
    WordBasic.EditBookmark Name:="her", SortBy:=0, GoTo:=1
    WordBasic.BorderBottom 0
    WordBasic.NextCell
    aar = WordBasic.Year(datosn)
Next teller

WordBasic.StartOfDocument

GoTo slut

fejl:
WordBasic.MsgBox errtext$
GoTo start

slut:

End Sub
Avatar billede learningvba Nybegynder
03. januar 2007 - 07:46 #3
Pyh :-) Jeg er elendig til Wordbasic, så jeg kan ikke lige gennemskue alt hvad der foregår.

Mit input må ikke bare tages "råt for usødet", men som et eksempel på hvordan man nyopretter en tabel, splitter en specifik celle i 2, og deler bredden i den oprindelige celle så forholdet bliver 9:1.

Du kan tage eksemplet, modificere det lidt, så du får noget der ligner dette:

Public Sub SplitCellIn2(TabelNr As Long, RowNr As Long, ColNr As Long)
  Dim OrigWidth As Long
  With ActiveDocument.Tables(TabelNr)
      With .Cell(RowNr, ColNr)
        OrigWidth = .Width
        .Split NumColumns:=2
      End With
      .Cell(RowNr, ColNr).Width = OrigWidth * 0.9
      .Cell(RowNr, ColNr + 1).Width = OrigWidth * 0.1
  End With
End Sub

Public Sub MakeTabel_CallSplitCellIn2()
  Dim OrigWidth As Long
  ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=4, NumColumns:=2, AutoFitBehavior:=False
  SplitCellIn2 ActiveDocument.Tables.Count, 2, 2
End Sub

Vær opmærksom på at koden efterlader dig i en tilfældig celle (1,1) så du selv sørge for at få markøren anbragt i den rigtige celle.

Håber det kan bringe dig et skridt videre.
Avatar billede ingeman Seniormester
21. januar 2007 - 11:02 #4
åbn svar
Avatar billede learningvba Nybegynder
23. januar 2007 - 07:57 #5
? :-)
Kom du videre?
Avatar billede ingeman Seniormester
19. april 2011 - 19:39 #6
lukket
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester