Cuestión : Células de copiado que contienen un nombre de la gama ......

Tengo esta gran hoja de balance y tiene una sección que además de un grupo de células, tenga una gama que ha sido wiithin definido el grupo de células (un subconjunto).  Quiero copiar el sistema de células, incluyendo las células de la gama y después hacer un duplicado exacto debajo de él.  Quisiera ver si hay una macro que pueda utilizar para copiar un sistema de células (puedo tener una gama dentro de una gama?), bajar dos filas y pegar el sistema de células….así creando un exacto la misma copia.  ¿Ahora para la pregunta difícil, la macro yo tiene que los funcionamientos contra ese nombre original de la gama, trabajo en ambos lugares?

Bright01
class= > " claro " del
soluciones >Related class= title= " del href= " /Software/Office_Productivity/Office_Suites/MS_Office/Excel/Q_26408920.html del Using una gama “nombre” al contenido claro .......

Respuesta : Células de copiado que contienen un nombre de la gama ......

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
const ROOT_OU = “cn=users”
const REPOSITORY_FILE = “c:\temp\repository.log”
const REPOSITORY_COMPARE_FILE = “c:\temp\repository _comp.log”
const RESULT_FILE = “c:\temp\result.log”
const USER_PROPS = “nombre, AccountDisabled, AccountExpirationDate, GroupMembership”

Fijar el usersPropsDict = CreateObject (“Scripting.Dictionary”)
fijar el objFSO = el createobject (“scripting.filesystemobject”)

GetUsersProps

si objFSO.FileExists (REPOSITORY_FILE) entonces
	objFSO.CopyFile REPOSITORY_FILE, REPOSITORY_COMPARE_FILE, VERDAD

	LogUsersProps
	CheckUserChanges

	LogUsersProps
terminar si

wscript.echo “terminan”

función CheckUsersStatus (prevStateArr, curStateArr)

	strResult dévil
	Fijar el usersDict = CreateObject (“Scripting.Dictionary”)
	
	para cada línea en prevStateArr
		si "" del ajuste (línea <> ) entonces
			el usuario = partió (línea, “, ") (0)
			usuario de usersDict.Add, 0
		terminar si
	después
	
	para cada línea en curStateArr
		si "" del ajuste (línea <> ) entonces
			el usuario = partió (línea, “, ") (0)
			si usersDict.Exists (usuario) entonces
				usersDict.Item (usuario) = 2
			
				usuario de usersDict.Add, 1
			terminar si
		terminar si
	después
	
	para cada llave en usersDict
		seleccionar el caso usersDict.Item (la llave) 
			caso 0: suprimieron al 'usuario
				suprimieron el strResult = el strResult y al “usuario [” y la llave y “]” y vbNewLine
			caso 1: 'nuevo usuario creado
				crearon el strResult = el strResult y al “nuevo usuario [” y la llave y “]” y vbNewLine
			caso 2: no cambiaron al 'usuario
		extremo selecto
	después
	CheckUsersStatus = strResult
función del final

CheckUserChanges secundario

	curStateData = objFSO.OpenTextFile (REPOSITORY_FILE, 1).ReadAll
	prevStateData = objFSO.OpenTextFile (REPOSITORY_COMPARE_FILE, 1).ReadAll
	el curStateArr = partió (curStateData, el vbNewLine)
	el prevStateArr = partió (prevStateData, el vbNewLine)
	
	el strSubject = “usuario del ANUNCIO cambia el registro del resultado -” y fecha y ““y hora
	
	strResult = CheckUsersStatus (prevStateArr, curStateArr)
	para i=1 a UBound (curStateArr)
		línea = curStateArr (i)
		si InStr (el prevStateData, ajusta (línea) y vbNewLine) = 0 entonces
			matchLine = FindUserChangeDelta (línea, prevStateArr)
			si "" <> del matchLine entonces				
				changeResult = LogUserPropertiesChange (matchLine, línea)
				si "" <> del changeResult entonces
					strResult = strResult y changeResult
				terminar si
			terminar si
		terminar si
	después
	
	si objFSO.FileExists (RESULT_FILE) entonces
		objResFile determinado = objFSO.OpenTextFile (RESULT_FILE, 8)
	
		objResFile determinado = objFSO.CreateTextFile (RESULT_FILE, 2)
	terminar si
	
	strSubject de objResFile.WriteLine
	
	si "" <> del strResult entonces
		strResult de objResFile.WriteLine
		strSubject de NotifyByEmail, strResult
	
		objResFile.WriteLine “ningunos cambios fueron supervisados.”
	terminar si
	objResFile.Close
	
terminar el submarino

sub NotifyByEmail (strSubject, el strResult)
	Amortiguar ToAddress
	Amortiguar MessageSubject
	Amortiguar MessageBody
	Amortiguar MessageAttachment

	Amortiguar el ol, ns, newMail

	ToAddress = “[email protected]”
	MessageSubject = strSubject
	MessageBody = strResult

	Fijar el ol = WScript.CreateObject (“Outlook.Application”)
	Fijar ns = ol.getNamespace (“MAPI”)
	ns.log en el "", "", verdad, falso
	Fijar el newMail = ol.CreateItem (el olMailItem)
	newMail.Subject = MessageSubject
	newMail.Body = MessageBody y vbCrLf

	'validar a recipiente, apenas en caso…
	Fijar myRecipient = ns.CreateRecipient (ToAddress)
	myRecipient.Resolve
	Si no myRecipient.Resolved entonces
	   MsgBox “recipiente desconocido”
	
	   newMail.Recipients.Add (myRecipient)
	   newMail.Send
	Terminar si

	Fijar el ol = nada

terminar el submarino

función LogUserPropertiesChange (matchLine, línea)

	changeResult = falso
	arr1 = partió (matchLine, “, ")
	arr2 = partió (línea, “, ")
	
	el userPropsArr = partió (USER_PROPS, “, ")
	strResult = “[” y arr1 (0) y “]” y vbNewLine
	
	para i=1 a UBound (userPropsArr)
		'dirección especial para GroupMembership
		si userPropsArr (i) = “GroupMembership” entonces
			si UBound (arr1) < i="" then="" strResult="strResult">= i y >= i de UBound (arr2) entonces
				si arr1 (i) <> arr2 (i) entonces
					strLine = userPropsArr (i) y “: ” y vbNewLine
					strLine = strLine y “antes =” y arr1 (i) y vbNewLine
					strLine = strLine y “después de =” y arr2 (i) y vbNewLine
					
					strResult = strResult y strLine y vbNewLine
					el changeResult = verdad
				terminar si
			
				si >= i de UBound (arr1) y UBound (arr2) < i="" then="" strLine="userPropsArr(i)">= i entonces
						strLine = userPropsArr (i) y “: ” y vbNewLine
						strLine = strLine y “antes = ninguna característica” y vbNewLine
						strLine = strLine y “después de =” y arr2 (i) y vbNewLine
						
						strResult = strResult y strLine y vbNewLine
						el changeResult = verdad
					terminar si
				terminar si
			terminar si
		terminar si
	después 
	si el changeResult = entonces verdad
		LogUserPropertiesChange = strResult y vbNewLine
	
		LogUserPropertiesChange = ""
	terminar si
	
terminar la función

función FindUserChangeDelta (línea, prevStateArr)

	usuario dévil, matchLine
	el usuario = partió (línea, “, ") (0)
	
	para cada prevLine en prevStateArr
		si "" del ajuste (prevLine <> ) entonces
			si fractura (prevLine, “, ") (0) = usuario entonces
				matchLine = prevLine
				salir para
			terminar si
		terminar si
	después

	FindUserChangeDelta = matchLine
función del final

LogUsersProps secundario
	en curriculum vitae del error después
	userProp dévil
	fijar el objLog = objFSO.CreateTextFile (REPOSITORY_FILE, 2)
	
	objLog.WriteLine USER_PROPS
	
	para cada objKey en usersPropsDict
		userProp = objKey
		para cada objInnerKey en el usersPropsDict (objKey)
			userProp = userProp y “,” y usersPropsDict (objKey) (objInnerKey)
		después
		
		userProp de objLog.WriteLine
	después
	
	objLog.Close
submarino del extremo

GetUsersProps secundario
	usuario dévil
	Const ADS_SCOPE_SUBTREE = 2

	Fijar el objConnection = CreateObject (“ADODB.Connection”)
	Fijar el objCommand =   CreateObject (“ADODB.Command”)
	objConnection.Provider = “ADsDSOObject”
	objConnection.Open “abastecedor activo del directorio”
	Fijar objCommand.ActiveConnection = objConnection

	objCommand.Properties (“tamaño de página”) = 1000
	objCommand.Properties (“Searchscope”) = ADS_SCOPE_SUBTREE
	
	Fijar el objRootDSE = GetObject (“LDAP: //RootDSE”)
	strDNSDomain = objRootDSE.Get (“defaultNamingContext”)

	si "" <> de ROOT_OU entonces
		ldaproot = “LDAP: /” y ROOT_OU y “,” y strDNSDomain
	
		ldaproot = “LDAP: /” y strDNSDomain
	terminar si
		
	objCommand.CommandText = “distinguishedName SELECTO, sAMAccountName DE “” y ldaproot y “” DONDE objectCategory='user'"
	
	Fijar el objRecordSet = objCommand.Execute

	Mientras que no objRecordSet.EOF
		usuario = objRecordSet.Fields (“sAMAccountName”). Valor
		
		si usersPropsDict.Exists (usuario) = falso entonces
			en curriculum vitae del error después
			Fijar el propsDict = CreateObject (“Scripting.Dictionary”)
			usuario de usersPropsDict.Add, propsDict
			Fijar ObjUser = GetObject (“LDAP: /” y objRecordSet.Fields (“distinguishedName”). Valor)
			propsDict.Add “AccountDisabled”, ObjUser.AccountDisabled
			propsDict.Add “AccountExpirationDate”, ObjUser.AccountExpirationDate
		terminar si
		
		objRecordSet.MoveNext
	WEnd 
	
	getUsersGroups
submarino del extremo

getUsersGroups secundarios

	grupo dévil
	Const ADS_SCOPE_SUBTREE = 2

	Fijar el objConnection = CreateObject (“ADODB.Connection”)
	Fijar el objCommand =   CreateObject (“ADODB.Command”)
	objConnection.Provider = “ADsDSOObject”
	objConnection.Open “abastecedor activo del directorio”
	Fijar objCommand.ActiveConnection = objConnection

	objCommand.Properties (“tamaño de página”) = 1000
	objCommand.Properties (“Searchscope”) = ADS_SCOPE_SUBTREE
	
	Fijar el objRootDSE = GetObject (“LDAP: //RootDSE”)
	strDNSDomain = objRootDSE.Get (“defaultNamingContext”)

	si "" <> de ROOT_OU entonces
		ldaproot = “LDAP: /” y ROOT_OU y “,” y strDNSDomain
	
		ldaproot = “LDAP: /” y strDNSDomain
	terminar si

	objCommand.CommandText = “distinguishedName SELECTO, sAMAccountName DE “” y ldaproot y “” DONDE objectCategory='group'"
	
	Fijar el objRecordSet = objCommand.Execute
	
	Mientras que no objRecordSet.EOF
		grupo = objRecordSet.Fields (“distinguishedName”). Valor
		
		Fijar ObjGroup = GetObject (“LDAP: /” y grupo)
		para cada objMember en objGroup.Members
			si usersPropsDict.Exists (objmember.samaccountname) entonces
				si usersPropsDict.Item (objmember.samaccountname). Entonces existe (“groupMembership”)
					groupMembership = usersPropsDict.Item (objmember.samaccountname). Artículo (“groupMembership”)
					groupMembership = groupMembership y “; ” y objGroup.samaccountname
					usersPropsDict.Item (objmember.samaccountname). Artículo (“groupMembership”) = groupMembership
				
					usersPropsDict.Item (objmember.samaccountname). Agregar el “groupMembership”, objGroup.samaccountname
				terminar si
				
			terminar si			
		después
		objRecordSet.MoveNext
	WEnd 
terminar el submarino
Otras soluciones  
 
programming4us programming4us