#1
|
|||
|
|||
If condition not working.
Hi
In the code below, why would OFFICEHEAD always be set to "JUST HEADER". Code:
With ActiveDocument.SelectContentControlsByTitle("A-OFFICE")(1) .LockContents = False .Range.Text = Split(StrDetails, "|")(0) .LockContents = False Select Case .Range.Text Case "OFFICE01" With ActiveDocument.SelectContentControlsByTitle("OFFICEHEAD")(1) .LockContents = False .Range.Text = "OFFICE01 HEADER" .LockContents = True End With Case "OFFICE02" With ActiveDocument.SelectContentControlsByTitle("OFFICEHEAD")(1) .LockContents = False .Range.Text = "OFFICE02 HEADER" .LockContents = True End With Case Else With ActiveDocument.SelectContentControlsByTitle("OFFICEHEAD")(1) .LockContents = False .Range.Text = "JUST HEADER" .LockContents = True End With End Select End With Thank you J |
#2
|
||||
|
||||
Presumably because whatever Split(StrDetails, "|")(0) contains - and populates "A-OFFICE" with - is neither "OFFICE01" nor "OFFICE02".
Based on what you've posted, your code would be better expressed as: Code:
With ActiveDocument.SelectContentControlsByTitle("A-OFFICE")(1) .LockContents = False .Range.Text = Split(StrDetails, "|")(0) .LockContents = False End With With ActiveDocument.SelectContentControlsByTitle("OFFICEHEAD")(1) .LockContents = False Select Case Split(StrDetails, "|")(0) Case "OFFICE01": .Range.Text = "OFFICE01 HEADER" Case "OFFICE02": .Range.Text = "OFFICE02 HEADER" Case Else: .Range.Text = "JUST HEADER" End Select .LockContents = True End With
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#3
|
|||
|
|||
I was using the value from Display Name not Value of the DropDown Content Control. For simplicity, how would it change if I wanted to use the Display Name? Thank you. |
#4
|
||||
|
||||
So how is the displayed name, which is equivalent to .Range.Text, any different from Split(StrDetails, "|")(0)? Where does StrDetails come from?
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#5
|
|||
|
|||
The dropdown list for the ContentControl has the following :
Code:
Display Name Value OFFICE01 OFFICENAME1|Address 1L1;Address 1L2;Address 1L3 OFFICE02 OFFICENAME2|Address 2L1;Address 2L2;Address 2L3 |
#6
|
||||
|
||||
What is the full code? So far, your descriptions and snippet lack context.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#7
|
|||
|
|||
My apology. Here is the full code. Ideally, the use of the Office Code instead of Name is what I would like to achieve.
Code:
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean) Application.ScreenUpdating = False Dim i As Long, StrDetails As String With ContentControl If .Title = "OFFICE" Then For i = 1 To .DropdownListEntries.Count If .DropdownListEntries(i).Text = .Range.Text Then StrDetails = .DropdownListEntries(i).Value Exit For End If Next If StrDetails = "" Then StrDetails = "||" With ActiveDocument.SelectContentControlsByTitle("A-OFFICE")(1) .LockContents = False .Range.Text = Split(StrDetails, "|")(0) .LockContents = False End With With ActiveDocument.SelectContentControlsByTitle("OFFICEHEAD")(1) .LockContents = False Select Case Split(StrDetails, "|")(0) Case "OFFICENAME1": .Range.Text = "OFFICENAME1 HEADER" Case "OFFICENAME2": .Range.Text = "OFFICENAME2 HEADER" Case Else: .Range.Text = "" End Select .LockContents = True End With With ActiveDocument.SelectContentControlsByTitle("A-FOOTER1")(1) .LockContents = False Select Case Split(StrDetails, "|")(0) Case "OFFICENAME1": .Range.Text = "OFFICENAME1 FOOTER1" Case "OFFICENAME2": .Range.Text = "OFFICENAME2 FOOTER1" Case Else: .Range.Text = "" End Select .LockContents = True End With With ActiveDocument.SelectContentControlsByTitle("A-FOOTER2")(1) .LockContents = False Select Case Split(StrDetails, "|")(0) Case "OFFICENAME1": .Range.Text = "OFFICENAME1 FOOTER2" Case "OFFICENAME2": .Range.Text = "OFFICENAME2 FOOTER2" Case Else: .Range.Text = "" End Select .LockContents = True End With With ActiveDocument.SelectContentControlsByTitle("A-FOOTER3")(1) .LockContents = False Select Case Split(StrDetails, "|")(0) Case "OFFICENAME1": .Range.Text = "OFFICENAME1 FOOTER3" Case "OFFICENAME2": .Range.Text = "OFFICENAME2 FOOTER3" Case Else: .Range.Text = "" End Select .LockContents = True End With With ActiveDocument.SelectContentControlsByTitle("A-OFFICE")(2) .LockContents = False .Range.Text = Split(StrDetails, "|")(0) .LockContents = True End With With ActiveDocument.SelectContentControlsByTitle("A-OFFICE")(3) .LockContents = False .Range.Text = Split(StrDetails, "|")(0) .LockContents = True End With With ActiveDocument.SelectContentControlsByTitle("OFFICEADDRESS")(1) .LockContents = False .Range.Text = Replace(Split(StrDetails, "|")(1), ";", Chr(11)) .LockContents = True End With End If End With Application.ScreenUpdating = True End Sub |
#8
|
||||
|
||||
A better way (IMHO) would be:
Code:
Private Sub Document_ContentControlOnExit(ByVal CCtrl As ContentControl, Cancel As Boolean) Application.ScreenUpdating = False Dim i As Long, StrDetails As String, StrOffice As String, StrHdFt As String With CCtrl If .Title = "OFFICE" Then For i = 1 To .DropdownListEntries.Count If .DropdownListEntries(i).Text = .Range.Text Then StrDetails = .DropdownListEntries(i).Value Exit For End If Next If StrDetails = "" Then StrDetails = "||" StrOffice = Split(StrDetails, "|")(0) With ActiveDocument.SelectContentControlsByTitle("A-OFFICE")(1) .LockContents = False .Range.Text = StrOffice .LockContents = False End With With ActiveDocument.SelectContentControlsByTitle("A-OFFICE")(2) .LockContents = False .Range.Text = StrOffice .LockContents = True End With With ActiveDocument.SelectContentControlsByTitle("A-OFFICE")(3) .LockContents = False .Range.Text = StrOffice .LockContents = True End With With ActiveDocument.SelectContentControlsByTitle("OFFICEADDRESS")(1) .LockContents = False .Range.Text = Replace(Split(StrDetails, "|")(1), ";", Chr(11)) .LockContents = True End With Select Case StrOffice Case "OFFICENAME1": StrHdFt = "OFFICENAME1 HEADER|OFFICENAME1 FOOTER1|OFFICENAME1 FOOTER2|OFFICENAME1 FOOTER3" Case "OFFICENAME2": StrHdFt = "OFFICENAME1 HEADER|OFFICENAME1 FOOTER1|OFFICENAME1 FOOTER2|OFFICENAME1 FOOTER3" Case Else: StrHdFt = "|||" End Select With ActiveDocument.SelectContentControlsByTitle("OFFICEHEAD")(1) .LockContents = False .Range.Text = Split(StrHdFt, "|")(0) .LockContents = True End With With ActiveDocument.SelectContentControlsByTitle("A-FOOTER1")(1) .LockContents = False .Range.Text = Split(StrHdFt, "|")(1) .LockContents = True End With With ActiveDocument.SelectContentControlsByTitle("A-FOOTER2")(1) .LockContents = False .Range.Text = Split(StrHdFt, "|")(2) .LockContents = True End With With ActiveDocument.SelectContentControlsByTitle("A-FOOTER3")(1) .LockContents = False .Range.Text = Split(StrHdFt, "|")(3) .LockContents = True End With End If End With Application.ScreenUpdating = True End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#9
|
|||
|
|||
This is fantastic, Thank you.
I am slowly reaching the end of my objective. Once done, I will be sharing the final template as I believe it will be useful to a lot of people. |
Tags |
if then else;case |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
If condition related query... | LearnerExcel | Excel | 1 | 03-12-2018 01:37 AM |
How to use if condition to for this ... | LearnerExcel | Excel | 1 | 12-19-2016 02:14 PM |
Use Two (concatenate) Fields If Condition Is Met (If... Then... Else) | SoonerLater | Mail Merge | 1 | 09-30-2015 05:40 PM |
Condition formating for date? | yabbah | Excel | 2 | 05-31-2012 12:38 PM |
check with condition | karti | Word | 2 | 03-15-2011 06:06 AM |